自定义WordPress评论帖子查询

时间:2010-10-29 18:52:11

标签: database wordpress comments

我正在尝试在WordPress安装中扩展注释的功能。我读到了一个难以捉摸的“自定义评论类型”功能,但找不到任何信息。相反,我在想我会在'comments'数据库表中添加一个自定义列'。这很容易。我不知道怎么做是自定义注释查询以保存,更新和阅读注释以反映新表列的存在。我以为会有一个过滤器来改变查询,但我找不到任何可以做到的...任何想法?

2 个答案:

答案 0 :(得分:9)

没有真正的自定义评论类型,但您可以使用“comment meta”轻松有效地添加列,这是一个名称/值对关联表,其中每个名称/值对关联使用'meta_key' 给出一个给定的评论(请不要在SQL数据库中添加一个列;这在WordPress开发人员社区中是不受欢迎的。)

假设您想让用户添加他们的Twitter帐户。这是将我的Twitter帐户保存到$comment_ID 标识的注释的代码(使用下划线为元数据名称添加前缀对于您通过自定义代码维护的任何元数据都是一个好主意选择元键):

update_comment_meta($comment_ID,'_twitter','mikeschinkel');

然后要加载要在模板中显示的值,只需调用get_comment_meta() (第三个参数表示返回单个值,而不是值数组):

$twitter = get_comment_meta($comment_ID,'_twitter',true);

当然,在不知道如何挂钩WordPress进行整合的情况下,上述功能不会有太多帮助。您需要使用两个钩子,第一个是wp_insert_comment,当WordPress保存注释时将调用它:

add_action('wp_insert_comment','yoursite_wp_insert_comment',10,2);
function yoursite_wp_insert_comment($comment_ID,$commmentdata) {
  $twitter = isset($_GET['twitter']) ? $_GET['twitter'] : false;
  update_comment_meta($comment_ID,'_twitter',$twitter);
}

第二个有点复杂;允许您添加字段并修改评论表单的其他方面的那个。 'comment_form_defaults'挂钩设置了注释的默认值,让你为Twitter字段添加HTML (我从comment_form()中的/wp-includes/comment-template.php函数中获取了HTML的格式WP v3.0.1中第1511行

add_filter('comment_form_defaults','yoursite_comment_form_defaults');
function yoursite_comment_form_defaults($defaults) {
  $email = $defaults['fields']['email'];
  $label = __( 'Twitter' );
  $value = isset($_GET['twitter']) ? $_GET['twitter'] : false;
  $defaults['fields']['twitter'] =<<<HTML
<p class="comment-form-twitter">
<label for="twitter">{$label}</label>
<input id="twitter" name="twitter" type="text" value="{$value}" size="30" />
</p>
HTML;
  return $defaults;
}

这就是行动中的样子:

WordPress Comments form with a Twitter field

这个评论形式的可扩展性对于WordPress 3.0来说是新的,所以它在开源项目中的新特性可能不会适应所有用例(例如没有简单的方法可以获得记住Twitter屏幕名称的价值)但希望你能够足够弯曲并获得你需要的东西,并且在将来发布的WordPress中,评论表格API几乎肯定会有所改进。

希望这有帮助。

-Mike

P.S。将来考虑在StackOverflow的姐妹网站WordPress Answers上发布您的问题;这就是大多数WordPress爱好者所喜欢的地方,那些能够快速回答这类问题的人。

答案 1 :(得分:0)

我找到了与该主题相关的有用链接:

Customizing Comments in WordPress - Functionality and Appearance