@IrinaVK

Как посчитать рейтинг записи в Wordpress?

Форма комментария имеет дополнительное поле для выставления рейтинга.

function additional_fields () {

  echo '<p class="comment-form-rating">';
  echo '<label for="rating">' . __( 'Rating', 'textdomain' ) . '<span class="required">:</span></label>';
  echo'
        <p class="like_btn activeCheck">
		<input type="radio" name="rate" value="1"> 1
	    <input type="radio" name="rate" value="2"> 2
		<input type="radio" name="rate" value="3"> 3
		<input type="radio" name="rate" value="4"> 4
		<input type="radio" name="rate" value="5"> 5
        </p>';
  echo '</p>';

}
add_action( 'comment_form_logged_in_after', 'additional_fields' );
add_action( 'comment_form_after_fields', 'additional_fields' );


function save_rate_field($comment_id) {
    add_comment_meta($comment_id, 'comment_rating', $_POST['rate']);
}

add_action('comment_post', 'save_rate_field');


Далее нужно посчитать рейтинг записи. Создать мета-поле для поста и занести туда поставленную оценку, если это первый комментарий. Если комментарии уже имеются, то обновить мета-поле по формуле: (собственно значение самого мета-поля + оценка из доп. поля нового комментария) / (количество комментариев + 1).

Как это всё записать?

Кроме этого ничего больше нагуглить не удалось:

<?php add_post_meta($post_id, $meta_key, $meta_value, true) 
or update_post_meta($post_id, $meta_key, $meta_valu); ?>
  • Вопрос задан
  • 364 просмотра
Пригласить эксперта
Ответы на вопрос 1
@aylo
Я делал так, рейтинг дробный.
Создаю 5 полей по оценкам, Оценка 1, Оценка 2 и тд. Когда пользователь ставит оценку 4, к примеру, я записываю старое значение +1. Далее высчитываем оценку.
$rating1       = get_post_meta( get_the_ID(), '_rating1', true );
$rating2       = get_post_meta( get_the_ID(), '_rating2', true );
$rating3       = get_post_meta( get_the_ID(), '_rating3', true );
$rating4       = get_post_meta( get_the_ID(), '_rating4', true );
$rating5       = get_post_meta( get_the_ID(), '_rating5', true );
$rating_amount = $rating1 + $rating2 + $rating3 + $rating4 + $rating5;
$user_rating   = ( 1 * $rating1 + 2 * $rating2 + 3 * $rating3 + 4 * $rating4 + 5 * $rating5 ) / $rating_amount;

Можно звездами вывести стандартными средствами вордпресса, только для начала подключить в function.php
require_once ABSPATH . 'wp-admin/includes/template.php';

wp_star_rating( [
    'rating' => $user_rating,
    'type'   => 'rating',
    'number' => 0,
] );
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы