我已经成功地建立了自己的自定义评论评级系统——到目前为止,该系统运行良好。我有一个想法:为什么不在个人评论中添加星级?我想这会很容易,因为我已经在评论中添加了一个自定义评级字段-通过过滤器,即。。
add_action( \'comment_form_logged_in_after\', \'additional_fields\' );
add_action( \'comment_form_after_fields\', \'additional_fields\' );
function additional_fields ($below) {
$ratsec = \'<p class="comment-form-rating">\'.
\'<label for="rating">\'. __(\'Rating\') . \'<span class="required">*</span></label>
<span class="commentratingbox">\';
//Current rating scale is 1 to 5. If you want the scale to be 1 to 10, then set the value of $i to 10.
for( $i=1; $i <= 5; $i++ )
$ratsec .= \'<span class="commentrating"><input type="radio" name="rating" id="rating" value="\'. $i .\'"/>\'. $i .\'</span>\';
$ratsec .= \'</span></p>\';
$below = $below .$ratsec;
return $below;
}
但是当我改变事情并添加这个过滤器时
add_filter( \'comment_text\', \'additional_fields\' );
它开始在用户文本下方的每条评论中显示单选按钮,但如何提交它们呢?和评论一起,你有提交按钮吗?
我的第一个问题是:如何提交评级?
我的第二个问题是:如果我为“评论第一”投三星票,它会影响所有评论还是只影响我投的那一条?我不知道如何把它们联系起来。
我正在使用注释元数据来保存数据,这些数据是。。。
add_action( \'comment_post\', \'save_comment_meta_data\' );
function save_comment_meta_data( $comment_id ) {
if ( ( isset( $_POST[\'rating\'] ) ) && ( $_POST[\'rating\'] != \'\') )
$rating = wp_filter_nohtml_kses($_POST[\'rating\']);
add_comment_meta( $comment_id, \'rating\', $rating );
}
现在代码已经完全更改了,我如何将数据保存在注释元数据中以使其显示在前端?在上述操作中需要进行哪些修改?另外,现在使用下面由@s\\u ha\\u dum解释的完美方法——如何根据注释id存储此数据?
最合适的回答,由SO网友:s_ha_dum 整理而成
这几乎完全是一个HTML和/或Javascript问题。您只需要制作适当的表单并使用一些PHP来处理它。
function additional_fields ($below) {
global $comment;
$ratsec = \'<form action="\'.get_permalink().\'" method="get" class="comment-form-rating">\';
$ratsec .= \'<input type="hidden" name="p" value="\'.get_the_ID().\'"\';
$ratsec .= \'<label for="rating">\'. __(\'Rating\') . \'<span class="required">*</span></label>\';
$ratsec .= \'<span class="commentratingbox">\';
//Current rating scale is 1 to 5. If you want the scale to be 1 to 10, then set the value of $i to 10.
for( $i=1; $i <= 5; $i++ ) {
$ratsec .= \'<span class="commentrating"><input type="radio" name="rating[\'.$comment->comment_ID.\']" id="rating" value="\'. $i .\'"/>\'. $i .\'</span>\';
}
$ratsec .= \'<input type="submit" name="rate" value="Rate" />\';
$ratsec .= \'</span>\';
$ratsec .= \'</form>\';
$below = $below .$ratsec;
return $below;
}
add_filter( \'comment_text\', \'additional_fields\' );
您现在有了一个将提交的表单
GET
字符串您应该看到您的注释ID。
使用CSS对其进行格式化,如果您想使用Javascript完全劫持表单提交,那么您根本不需要提交按钮(用Javascript隐藏它,但在禁用Javascript的情况下保留它)。为此,请参见AJAX API.
以下内容将保存数据。
function save_comment_meta_data() {
if ( !empty($_GET[\'rating\'])) {
foreach ($_GET[\'rating\'] as $k => $v) {
if (!ctype_digit("$k")) {
return;
} else {
$k = (int)$k;
}
$comment = get_comment($k);
if (!empty($comment)) {
$rating = wp_filter_nohtml_kses($_GET[\'rating\'][$k]);
add_comment_meta( $k, \'rating\', $rating );
}
}
}
}
add_action( \'wp_head\', \'save_comment_meta_data\' );