0

I have managed to make my own custom comment rating system - that was working fine until now. I got an idea: why not add star rating to individual comments? I thought it would be easy as I have already added a custom rating field in comment - through filter that is ..

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;
}

But when I change things and add this filter

add_filter( 'comment_text', 'additional_fields' );

it starts showing the radio button in every comment just below the user text - but how to submit them? As along with comment you have submit button ?

My first Question is: How I can make the rating submit ?

My Second Question is: If I vote 3 star for "comment number one" will it affect all the comments or just the one I voted? I am confused how to make connection between them.

I was using comment meta data to save the data that was ...

     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 );
     }

Now the Code is completely changed How will I save the data in comment meta data to make it show on the front end ? What Modifications are required in the above action ? Plus now using the perfect method explained below by @s_ha_dum -- How will I store this data according to comment id ?

2 Answers 2

2

This is almost entirely an HTML and/or Javascript question. You just need to make proper forms and have some PHP to process it.

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' );

You now have a form that will submit and in the GET string you should see your comment ID.

Use CSS to format it and if you want use Javascript to hijack the form submission entirely, so that you don't need the submit button at all (hide it with Javascript but keep it in case Javascript is disabled). For that see the AJAX API.

The following will save the data.

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' );
10
  • Its doing strange things - when i press submit it redirect me to unknown page itokra[dot]com/design/?rating%5B7%5D=2&rate=Rate
    – Cid Ubaid
    Jun 4, 2013 at 18:17
  • @CidUbaid : see the edit
    – s_ha_dum
    Jun 4, 2013 at 18:30
  • same error redirecting to same place.
    – Cid Ubaid
    Jun 4, 2013 at 18:54
  • What is an URL to one of your posts/pages that have comments?
    – s_ha_dum
    Jun 4, 2013 at 18:57
  • 1
    I wish I could give you more than +1 - People like you May GOD bless you .. Thanks for the great help.
    – Cid Ubaid
    Jun 5, 2013 at 5:05
0

You could add a metabox to your comment. For this you can use some hooks such as preprocess_comment() and comment_post() which will allow you to save rating along with comments. This will also add some meta in your database.

1
  • I have already added them but Now I want to know - that I am displaying them on every comment - I want them to be more interactive that author can vote them so I want to know how I can submit them ?
    – Cid Ubaid
    Jun 4, 2013 at 17:38

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.