Есть система отзывов, которая представляет из себя обычные комментарии с 3 доп полями для оценки (каждый параметр можно оценить на максимум 5 звезд). У поста есть 4 рейтинга, средний рейтинг по этим трем параметрам из комментариев и общий рейтинг, который является средним арифметическим этих трех.
Для наглядности:
Post #1
--Удобство
--Качество
--Цена
--Общий рейтинг
Общий рейтинг = (Удобство + Качество + Цена) / 3
Удобство, Качество и Цена собираются из соответствующих полей в комментариях (берем для каждого поста функцией
get_comments()
все комментарии, прогоняем по циклу, суммируем все параметры и делим на кол-во комментов).
Это что касается расчетов. Что я делаю сейчас. В самом single.php у меня как раз и производятся эти действия:
$comments = get_comments(array(
'post__in' => $post->ID));
$comments_count = 0;
$price = 0;
$quality = 0;
$service = 0;
foreach ($comments as $comment) {
$comment_id = $comment->comment_ID;
$price_rating = (int)get_comment_meta( $comment_id, 'price_rating', true );
$quality_rating = (int)get_comment_meta( $comment_id, 'quality_rating', true );
$service_rating = (int)get_comment_meta( $comment_id, 'service_rating', true );
$price +=$price_rating;
$quality +=$quality_rating;
$service +=$service_rating;
$comments_count++;
}
// Average ratings
$price_rating = ($comments_count > 0) ? $price/$comments_count : 0;
$quality_rating = ($comments_count > 0) ? $quality/$comments_count : 0;
$service_rating = ($comments_count > 0) ? $service/$comments_count : 0;
$overall_rating = ($price_rating+$quality_rating+$service_rating) / 3;
То есть сам общий рейтинг самого поста нигде не хранится, он лишь каждый раз высчитывается.
Но у меня этот рейтинг должен показываться еще и в короткой новости. По сему я хочу этот рейтинг хранить, то есть при добавлении комментария, крепиться к хуку и обновлять общий рейтинг поста. Правильно ли это или эту задачу нужно решать иначе?