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条件化的禁用插件一例
每个参数对应的位置如下图所示:
通过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条评论
评论已关闭。