WordPress评论表单默认只接受昵称、电子邮箱、网址和评论内容这四个字段,如果你想让用户输入一些额外的信息,就得想办法拓展评论表单的功能。用户评论存储在wp_comments表中,每个默认字段也是这个表的一个字段,添加额外字段肯定不能通过修改这个数据表实现。
wp_commentmeta
wp_comments也有一个与之对应的meta表,叫做wp_commentmeta。posts可以用post meta存储一些额外信息,comment也可以用comment meta存储信息。因此,我们可以用wp_commentmeta表存储要添加到评论表单中的内容。
举个实际的例子,向评论表单添加新浪微博ID字段(用ID而不是昵称,是因为Sola还没研究过新浪API
),用户输入新浪微博ID以后,就可以在评论中显示“加关注”按钮,人们点击这个按钮就可以关注评论者了,这样也许能鼓励评论者发布一些有用吸引人的评论。
数据将会以如下形式存储在wp_commentmeta表单中
如何向评论表单添加自定义字段
这个是老生常谈了,可以使用filter comment_form_default_fields或者comment_form_defaults。如果你坚持要知道为什么可以用这两个,推荐去读一下源代码
wp-includes/comment-template.php 1535行(apply_filters( 'comment_form_default_fields', $fields ))和1549行($args = wp_parse_args( $args, apply_filters( 'comment_form_defaults', $defaults ) );)
添加微博字段的代码如下,写到主题的functions.php中,再次膜拜强大的functions.phpadd_filter('comment_form_default_fields','comment_form_add_weibo');
function comment_form_add_weibo($fields) {
$label = __( 'Weibo ID' );
$value = isset($_POST['weibo']) ? $_POST['weibo'] : false;
$fields['weibo'] =<<
{$label}
HTML;
return $fields;
}
存储数据
通过action wp_insert_comment实现,代码如下,同样放到functions.php中add_action('wp_insert_comment','wp_insert_weibo',10,2);
function wp_insert_weibo($comment_ID,$commmentdata) {
$weibo = isset($_POST['weibo']) ? $_POST['weibo'] : false;
update_comment_meta($comment_ID,'_weibo',$weibo);
}
添加上面两段代码以后,就可以查看效果了,以twentyeleven主题为测试对象(wp > 3.0)
当然Sola小偷懒了一下,第一段代码中的
被换成了
不然是无法实现与其它字段相同的效果的,除非去改一下CSS,不过懒人嘛
填好表单提交以后微博ID就会被保存到wp_commentmeta表单中,如本文第一张图片所示。
如何调用comment meta信息
调用代码如下$weibo_id = get_comment_meta($comment_ID,'_weibo',true);
为了能看到效果,修改一下twentyeleven的functions.php中wp_list_comments()函数的回调函数twentyeleven_comment(),在这个函数中输出新浪微博“加关注”按钮。需要添加的代码如下
<?php $weibo_id = get_comment_meta($comment->comment_ID,'_weibo',true);
if( !empty($weibo_id) ):?>
效果如下图所示
但在把微博ID换成微博昵称之前,这段代码没有实际用途,对用户很不友好,要换成用户昵称也是可以的,需要获得新浪API使用权,通过API调用将用户的昵称转换成ID,再用这段代码输出。
资源链接