如何将评分与个人评论联系起来?

时间:2013-06-04 作者:Cid Ubaid

我已经成功地建立了自己的自定义评论评级系统——到目前为止,该系统运行良好。我有一个想法:为什么不在个人评论中添加星级?我想这会很容易,因为我已经在评论中添加了一个自定义评级字段-通过过滤器,即。。

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存储此数据?

2 个回复
最合适的回答,由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\' );

SO网友:JMau

您可以在评论中添加元框。为此,您可以使用一些挂钩,例如preprocess\\u comment()和comment\\u post(),这将允许您将评级与注释一起保存。这也会在数据库中添加一些元数据。

结束

相关推荐

Wp-plugins(必须使用Plugins)URL是否可以在unctions.php中使用?

wp插件(必须使用插件)URL是否可以作为在函数中使用的目标。php?我有一个mu函数。mu plugins文件夹中的php文件。一个函数调用javascript文件(alerts.js) 位于example.com/wp-content/mu-plugins/js/. 如何在我的函数中定位mu插件文件夹?目前,我正在使用get_site_url() . \'/wp-content/mu-plugins/js/alerts.js\',虽然与问题不完全相关,但这是用于调用javascript文件的完整函数: