博客加了个联系页面,简单公布了一些自己的联系方式。突然想想给这个页面加个直接发送邮件给我的表单,于是上网搜了一下,在wordpress.la还真找到一个,稍微改造了一下,使之与自己的模板匹配,并且添加了设置cookie功能。
由于不想再为这个页面写太多css,于是便想何不将这个表单的输入项与wordpress的评论模板弄成一致的呢?反正需要输入的都是名字、邮箱两项。说干就干:
准备工作就是你先按照《教你如何给WordPress主题创建内置联系表单》这篇文章创建你的联系表单模板。
第一步,改造表单输入项
在<form>前面加上以下代码
<?php
$comment_author=stripslashes($_COOKIE['comment_author_'.COOKIEHASH]);
$comment_author_email=stripslashes($_COOKIE['comment_author_email_'.COOKIEHASH]);
$comment_author_url=stripslashes($_COOKIE['comment_author_url_'.COOKIEHASH]);
$username = ($user_ID) ? get_the_author_meta('user_nicename', $user_ID) : $comment_author;
$useremail = ($user_ID) ? get_the_author_meta('user_email', $user_ID) : $comment_author_email;
$userurl = ($user_ID) ? get_the_author_meta('user_url', $user_ID) : $comment_author_url;
?>
这段代码是从cookie中获取电脑上保存的名字、邮箱、网址等值,
如果是登录用户,则取得登陆用户相关信息。
为了像wordpress评论那样之前评论过下次就可以自动填入相关值,我们还需要对表单的输入项做相关调整。将输入名字的input的value改为
value="<?php if(isset($_POST['author'])) echo $_POST['author'];else echo $username; ?>"
即在后面加上“else echo $username”。$username我们前面已经定义过了,这个是为了在没有输入情况下填入$username的值。
同样的,email输入框的value改为
value="<?php if(isset($_POST['email'])) echo $_POST['email'];else echo esc_attr($useremail); ?>"
至此,表单改造基本完成,如果你想有网址输入,依次修改即可。
第二步,添加设置cookie功能
说到php的cookie功能,我好早之前想用结果一直测试不成功,后来才知道原来setcookie函数必须在<html>标签前面才可以。好囧。。
说正事,在模板前面的代码中找到$emailSent = true;,紧接着在它后面添加
if (! is_user_logged_in() ) {
setcookie('comment_author_' . COOKIEHASH, $name, time() + 30000000, COOKIEPATH, COOKIE_DOMAIN);
setcookie('comment_author_email_' . COOKIEHASH, $email, time() + 30000000, COOKIEPATH, COOKIE_DOMAIN);
//setcookie('comment_author_url_' . COOKIEHASH, esc_url($website), time() + 30000000, COOKIEPATH, COOKIE_DOMAIN);
}
即非登录用户状态下邮件发送后设置相关cookie.
这样,发送邮件的用户也可以留下cookie了,下次就不用再输入邮件姓名了。
具体的,大家可以到我联系页面查看。在我博客有过评论的同学将同样会看到评论人信息自动隐藏、自动填入相关信息。想要亲自查看登录状态下情况,可以在此注册一个账号,然后在我的博客登陆。登陆用户不会看到任何广告哈。
但是,大家千万不要随便向我乱发邮件哈!!
在一切讲究用户体验的今天,这个小功能还是很有必要的。

有人会问:难道你还给自己发邮件吗?哈,我这样做一来方便那几个在我博客注册过的人直接和我联系,二来是保持和评论模板一致,三来我也可以随时查看博客主机的邮件功能正常不正常。。。