WordPress评论表单可以通过钩子函数(Hooks)添加或者修改内容,wordprss 3.2中,评论表单通过comment_form()函数输出,这个函数一般写在comments.php中。可以使用的filters和actions如下:

WordPress Comment Filters:

  • comment_form_default_fields
  • comment_form_defaults
  • comment_form_logged_in
  • comment_form_field_{$name}

$defaults的参数:

  • title_reply
  • comment_notes_before
  • comment_form_defaults_fields
  • comment_field
  • comment_notes_after
  • label_submit

相关文章推荐

《WordPress启动过程》 – WordPress action hook的执行顺序

《如何在某些页面禁用多说》 – 利用WordPress hook条件化的禁用插件一例

每个参数对应的位置如下图所示:

WordPress Comment Filters

通过add_filter()就可以轻松使用这些钩子向表单内添加我们需要的元素,最近研究一个收费插件叫MyPreviewPlugin,该插件是一个评分插件,我想向wordPress的评论表单中插入一个rating form,虽然该插件提供了自动embed的方式,但不知道何故总是不起作用,所以只能用插件提供的模板函数来插入,该函数名为myrp_api_ratings_form_table($post_ID=null, $return=false),通过该函数可以直接打印出一个rating form,如果设置return参数为true,则可以将输出内容作为字符串返回,这里使用作为字符串返回的方式,代码如下:

add_filter('comment_form_defaults', 'rating_form');
    function rating_form( $defaults ) {
        $defaults['comment_field'] .= myrp_api_ratings_form_table(null,true);
        return $defaults;
}

这里使用 comment_field,将rating表单加到评论框的后面,评论提示的前面,效果如下图所示:

如果要加到评论框的前面并位于“Logged in as…”这句话后面,则使用下面的代码

add_filter('comment_form_defaults', 'rating_form');
 function rating_form( $defaults ) {
        $defaults['comment_field'] = myrp_api_ratings_form_table(null,true).$defaults['comment_field'];
        return $defaults;
}

因为代码中使用的myrp_api_ratings_form_table()函数是插件提供的,为了避免插件被停用后主题报错,应该将上面的代码放到如下条件判断内

if ( function_exists( 'myrp_api_ratings_form_table' ) ) {
......
}

WordPress Comment Actions:

  • comment_form_before
  • comment_form_must_log_in_after
  • comment_form_top
  • comment_form_logged_in_after
  • comment_form_before_fields
  • comment_form_after_fields
  • comment_form
  • comment_form_after
  • comment_form_comments_closed

位置如下图所示:

注意comment_form_before_fields和comment_form_after_fields只有在用户没有登录时才起作用,因为用户登陆后Name,Email和Website这三个表单域就不存在了,所以这两个钩子也不会执行。

代码示例,通过add_action()和comment_form_top添加rating form,代码如下:

if ( function_exists('myrp_api_ratings_form_table')){
    //add rating form after the text leave a reply
    add_action( 'comment_form_top', 'myrp_api_ratings_form_table' );
}

结果如下图所示:

分享一个不错的slides,关于Hook Into WordPress Comments

1条留言

评论功能已关闭