您现在的位置是:首页 > 网站制作 > WordpressWordpress
WordPress函数:comment_form( )个性化评论表单多种方法
杰帅2023-06-16【Wordpress】人已围观
简介在 WordPress 主题中, 使用 comment_form 函数来生成一个评论表单。通常把评论模块的代码写进单独的 comments.php 文件中,然后使用 comments_template 这个函数在 single.php、page.php 等文件底部引用评论模块。
在 WordPress 主题中, 使用 comment_form 函数来生成一个评论表单。通常把评论模块的代码写进单独的 comments.php 文件中,然后使用 comments_template 这个函数在 single.php、page.php 等文件底部引用评论模块。
本文中,使用twentysixteen 这个官方主题作为演示我们首先看看默认的评论表单:
一、调用comment_form()函数
我们在文章页单篇文章single.php或页面page.php通过 comments_template() 函数加载我们的加载评论模板,那么comment_form()在什么地方调用呢?如何调用呢?当然是默认的comments.php评论模板文件,或者你自定义的评论模板文件,建议你阅读 WordPress函数:comments_template(加载评论模板)
comment_form()通过模板输出完整的评论窗体。它有二个参数,形式如下:
<?php comment_form($args, $post_id) ?>
$args:comment_form()的输出配置参数,为一个关联数组,配置项非常丰富,将再下一步说明。
$post_id:文章id,默认为空,即当前id 。
二、$args数组默认参数详解
官方默认代码
$args = array(
'id_form' => 'commentform',
'class_form' => 'comment-form',
'id_submit' => 'submit',
'class_submit' => 'submit',
'name_submit' => 'submit',
'title_reply' => __( 'Leave a Reply' ),
'title_reply_to' => __( 'Leave a Reply to %s' ),
'cancel_reply_link' => __( 'Cancel Reply' ),
'label_submit' => __( 'Post Comment' ),
'format' => 'xhtml',
'comment_field' => '<p class="comment-form-comment"><label for="comment">' . _x( 'Comment', 'noun' ) .
'</label><textarea id="comment" name="comment" cols="45" rows="8" aria-required="true">' .
'</textarea></p>',
'must_log_in' => '<p class="must-log-in">' .
sprintf(
__( 'You must be <a href="%s">logged in</a> to post a comment.' ),
wp_login_url( apply_filters( 'the_permalink', get_permalink() ) )
) . '</p>',
'logged_in_as' => '<p class="logged-in-as">' .
sprintf(
__( 'Logged in as <a href="%1$s">%2$s</a>. <a href="%3$s" title="Log out of this account">Log out?</a>' ),
admin_url( 'profile.php' ),
$user_identity,
wp_logout_url( apply_filters( 'the_permalink', get_permalink( ) ) )
) . '</p>',
'comment_notes_before' => '<p class="comment-notes">' .
__( 'Your email address will not be published.' ) . ( $req ? $required_text : '' ) .
'</p>',
'comment_notes_after' => '<p class="form-allowed-tags">' .
sprintf(
__( 'You may use these <abbr title="HyperText Markup Language">HTML</abbr> tags and attributes: %s' ),
' <code>' . allowed_tags() . '</code>'
) . '</p>',
'fields' => apply_filters( 'comment_form_default_fields', $fields ),
);
常用参数:
fields(array) (可选) 除了评论输入框之外的输入框, 比如 author, email, url.
默认值: apply_filters( ‘comment_form_default_fields’, $fields )
comment_field(string) (可选) 评论框的textarea 和 label.默认值:无
must_log_in(string) (optional)默认值:无
logged_in_as(string) (可选) 默认值:无
comment_notes_before(string) (可选) 评论框前的html标签,默认值:无
comment_notes_after(string) (可选) 评论框后面的html 标签,默认值:无
id_form(string) (可选) 输入form的id属性,默认值: ‘commentform’
id_submit(string) (可选) submit按钮的id属性值.默认值: ‘submit’
title_reply(string) (可选) 评论form的标题.默认值: ( ‘Leave a Reply’ ) title_reply_to(string) (可选) 默认值: ( ‘Leave a Reply to %s’ )
cancel_reply_link(string) (可选 取消回复的链接文字.默认值: ( ‘Cancel reply’ ) label_submit(string) (可选)提交按钮的名字.默认值: ( ‘Post Comment’ )
$fields :缺省的输入项。注意这个和前面的第一个fields数组的区别,看下面的注释
三、$fields数组默认参数详解
$fields = array(
// 作者名称字段
'author' =>
'<p class="comment-form-author"><label for="author">' . __( 'Name', 'domainreference' ) . '</label> ' .
( $req ? '<span class="required">*</span>' : '' ) .
'<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) .
'" size="30"' . $aria_req . ' /></p>',
// 电子邮件字段
'email' =>
'<p class="comment-form-email"><label for="email">' . __( 'Email', 'domainreference' ) . '</label> ' .
( $req ? '<span class="required">*</span>' : '' ) .
'<input id="email" name="email" type="text" value="' . esc_attr( $commenter['comment_author_email'] ) .
'" size="30"' . $aria_req . ' /></p>',
// 网站地址字段
'url' =>
'<p class="comment-form-url"><label for="url">' . __( 'Website', 'domainreference' ) . '</label>' .
'<input id="url" name="url" type="text" value="' . esc_attr( $commenter['comment_author_url'] ) .
'" size="30" /></p>',
);
四、个性化之删除字段方法之一
如果我们想去掉「网址」文本框,我们把上面 ‘url’ 的键删掉即可.
我们使用下面语句来替换 twentysixteen 主题中 comments.php 调用表单的函数 comment_form :
$commenter = wp_get_current_commenter();
$req = get_option( 'require_name_email' );
$aria_req = ( $req ? " aria-required='true'" : '' );
$fields = array(
'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Name' ) . '</label> ' . ( $req ? '<span class="required">*</span>' : '' ) .
'<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' /></p>',
'email' => '<p class="comment-form-email"><label for="email">' . __( 'Email' ) . '</label> ' . ( $req ? '<span class="required">*</span>' : '' ) .
'<input id="email" name="email" type="text" value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="30"' . $aria_req . ' /></p>',
);
$comments_args = array(
'fields' => $fields
);
comment_form($comments_args);
先使用 wp_get_current_commenter 函数来获取当前的评论者的一些信息,方便下面调用。然后生成了一个 fields 变量,内容是一个包含 author、email 两个键的数组,对应的键值就是评论表单的 HTML 结构,效果如图:
五、个性化之删除字段方法之二
在主题的functions.php文件中添加如下代码即可:
/**
*删除url评论字段
*
*/
add_filter('comment_form_default_fields', 'unset_url_field');
function unset_url_field($fields){
if(isset($fields['url']))
unset($fields['url']);
return $fields;
}
备注:这个方法使用的前提是你使用了wordpress默认的评论表单,如果是主题使用了自己开发的wordpress评论表单,你只需要去掉主题评论表单的站点字段即可。
注意:由于 email,author 文本框是必填的,当你删除了在提交评论时,是会出错滴。
五、改变评论表单标题和发表按钮文字
$commenter = wp_get_current_commenter();
$req = get_option( 'require_name_email' );
$aria_req = ( $req ? " aria-required='true'" : '' );
$fields = array(
'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Name' ) . '</label> ' . ( $req ? '<span class="required">*</span>' : '' ) .
'<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' /></p>',
'email' => '<p class="comment-form-email"><label for="email">' . __( 'Email' ) . '</label> ' . ( $req ? '<span class="required">*</span>' : '' ) .
'<input id="email" name="email" type="text" value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="30"' . $aria_req . ' /></p>',
);
$comments_args = array(
'fields' => $fields,
'title_reply'=>'评论',
'label_submit' => '发表评论!'
);
comment_form($comments_args);
六、个性化之增加自定义字段
想要用户在发表评论的时候填写更多的表单信息,比如地址,电话,微信等等,我们仍然使用 fields 这个参数来传递。如果想要增加一个新的文本框让评论者填写自己所在的地区,我们使用下面这段代码:
$commenter = wp_get_current_commenter();
$req = get_option( 'require_name_email' );
$aria_req = ( $req ? " aria-required='true'" : '' );
$fields = array(
'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Name' ) . '</label> ' . ( $req ? '<span class="required">*</span>' : '' ) .
'<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' /></p>',
'email' => '<p class="comment-form-email"><label for="email">' . __( 'Email' ) . '</label> ' . ( $req ? '<span class="required">*</span>' : '' ) .
'<input id="email" name="email" type="text" value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="30"' . $aria_req . ' /></p>',
'position' => '<p class="comment-form-position"><label for="position">' . __( '地区' ) . '</label>' .
'<input id="position" name="position" type="text" size="30" /></p>'
);
$comments_args = array(
'fields' => $fields,
'title_reply'=>'评论一下',
'label_submit' => '提交评论'
);
comment_form($comments_args);
虽然我们可以在这个文本框中填写信息,但是你点击发送之后,不会有任何变化,因为还没有具体的功能代码接受你这个新建表单的内容。实现这个功能需要用到 comment_post 这个 hook 钩子。先给出具体代码:
function add_comment_meta_values($comment_id) {
if(isset($_POST['position'])) {
$position = wp_filter_nohtml_kses($_POST['position']);
add_comment_meta($comment_id, 'position', $position, false);
}
}
add_action ('comment_post', 'add_comment_meta_values', 1);
将上面代码复制到 functions.php 文件中即可。上面代码大体功能就是:在评论内容被提交的时候会触发 comment_post 这个 hook ,使用 add_action 函数为 comment_post 这个 hook 绑定一个函数,函数的内容就是接收表单中 position 这个文本框的内容,然后过滤掉 html 标籤,再使用 add_comment_meta 这个函数将内容插入到数据库中。具体插入到 wp_commentmeta 这个表中,你提交了信息之后,会在这个表中发现对应内容。
仅仅存到了数据库中当然不行了,我们还要取出来在评论内容中显示。使用下面代码可以调用出来对应的内容:
<?php echo "TA 现在在: ".get_comment_meta( $comment->comment_ID, 'position', true ); ?>
我们可以通过wp_list_comments()函数调用自定义的评论显示列表里添加以上代码,把我们自定义添加的字段信息打印出来。
六、 comment_form 函数总结说明
1.comment_form 是可以传递一些参数,我们可以通过编写对应的参数实现表单自定义。你可以打开官方文档看一下:http://codex.wordpress.org/Function_Reference/comment_form
2.要使用在自定义回调函数中的上述代码中的变量,必须首先将这些变量设置在回调函数中:
$commenter = wp_get_current_commenter();
$req = get_option( 'require_name_email' );
$aria_req = ( $req ? " aria-required='true'" : '' );
否则wordpress会报错!
Tags:comment_form( ) wordpress函数 wordpress教程 评论
很赞哦! ()
相关文章
随机图文
-
WordPress 页面模板(Page Template)下拉列表不显示的原因及解决方法
WordPress 的自定义页面模板是一个非常强大好用的功能,使用它新建一些静态页面(Page),添加上一些数据调用的函数,再在网页上做一个导航连接到对应的页面就可以实现很多自定义的功 -
wordpress发布文章HTML标签被自动过滤掉该如何处理?
wordpress发布文章时很多html标签都会自动过滤掉,造成了文章中无法添加<style></style><script></script>等标签。那么该如何如何处理呢? 解决方法一: 将wp-includes文件夹下 -
wp_reset_postdata 和 wp_reset_query 的作用与区别
什么时候使用wp_reset_query,什么时候用wp_reset_postdata? -
wordpress 上传的图片不显示的问题 base64,data:image/gif