В современных проектах отзывы пользователей играют ключевую роль для повышения доверия и улучшения конверсии. Однако стандартная функциональность WordPress не предусматривает полноценной иерархии отзывов с возможностью оставлять рейтинги и ответы на отзывы. В этой статье разберём, как создать такую систему отзывов с иерархией и рейтингами, используя собственный код и проверенные плагины.
Почему нужна иерархия отзывов с рейтингами
Иерархия отзывов позволяет пользователям не просто оставлять комментарии, а вести диалог — отвечать на отзывы других пользователей или админа. Это повышает вовлечённость и показывает, что отзывы не статичны, а обсуждаются.
Рейтинги в отзывах дают наглядный показатель качества товара или услуги. Вместе с иерархией рейтинги делают отзывы более информативными и полезными для будущих клиентов.
Реализация такой системы требует настройки кастомных типов комментариев, добавления мета-полей для рейтингов и реализации логики отображения иерархии.
Используемые плагины для расширения отзывов
Для начала рассмотрим плагины, которые помогут добавить рейтинги и улучшить функциональность отзывов:
- WP Review — популярный плагин для рейтингов с поддержкой звёзд, баллов и процентов.
- WP Discussion Embed — расширяет возможности комментариев, добавляя вложенность и фильтрацию.
- Clearfy Pro — для оптимизации и безопасности, включая управление комментариями и отзывами.
Эти плагины помогут быстро добиться нужного результата, но иногда требуется индивидуальная логика — тогда обращаемся к коду.
Создание кастомной иерархии отзывов с рейтингами через код
Рассмотрим пример создания кастомного типа комментариев (отзывов) с полем рейтинга и поддержкой ответов.
1. Добавляем поле рейтинга к комментариям
Для начала расширим форму комментариев, добавив поле для выбора рейтинга от 1 до 5.
function wphierarchy_add_rating_field() {
echo '<p class="comment-form-rating">'
.'<label for="rating">Рейтинг: <span class="required">*</span></label>'
.'<select name="rating" id="rating" required>'
. '<option value="">Выберите рейтинг</option>';
for ($i = 1; $i <= 5; $i++) {
echo '<option value="' . $i . '">' . $i . '</option>';
}
echo '</select></p>';
}
add_action('comment_form_logged_in_after', 'wphierarchy_add_rating_field');
add_action('comment_form_after_fields', 'wphierarchy_add_rating_field');
Этот код добавит обязательное поле рейтинга при оставлении отзыва.
2. Сохраняем рейтинг в мета-поле комментария
function wphierarchy_save_comment_rating($comment_id) {
if (isset($_POST['rating']) && $_POST['rating'] != '') {
$rating = intval($_POST['rating']);
add_comment_meta($comment_id, 'wphierarchy_rating', $rating);
}
}
add_action('comment_post', 'wphierarchy_save_comment_rating');
Теперь каждый комментарий будет хранить значение рейтинга.
3. Отображаем рейтинг и иерархию отзывов
Для вывода отзывов с рейтингами и поддержкой ответов, используем кастомный callback при выводе комментариев.
function wphierarchy_review_list($comment, $args, $depth) {
$GLOBALS['comment'] = $comment;
$rating = get_comment_meta($comment->comment_ID, 'wphierarchy_rating', true);
?>
<li id="comment-<?php comment_ID(); ?>" <?php comment_class(array('wphierarchy-review'), $comment); ?>>
<div class="wphierarchy-review-content">
<div class="wphierarchy-review-meta">
<strong><?php comment_author(); ?></strong>
<span class="wphierarchy-rating">Рейтинг: <?php echo esc_html($rating); ?>/5</span>
<span class="wphierarchy-date"><?php comment_date(); ?></span>
</div>
<div class="wphierarchy-review-text"><?php comment_text(); ?></div>
<div class="wphierarchy-review-reply"><?php comment_reply_link(array_merge($args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?></div>
</div>
</li>
<?php
}
Для вывода комментариев с такой структурой нужно вызвать:
wp_list_comments(array(
'style' => 'ol',
'short_ping' => true,
'avatar_size' => 50,
'callback' => 'wphierarchy_review_list'
));
Этот вызов поддерживает вложенность ответов, что и создаёт иерархию.
Дополнительные советы по улучшению отзывов
Валидация и безопасность данных
Обязательно проверяйте полученный рейтинг и комментарии на безопасность. Пример выше использует intval() для рейтинга — это минимальная защита. Для комментариев используйте wp_kses_post() при выводе, чтобы избежать XSS.
Кэширование и производительность
При большом количестве отзывов вложенная иерархия может замедлить загрузку страницы. Используйте кэширование, например, через Transients API или плагины кэширования. Плагин Clearfy Pro из wpshop.ru поможет оптимизировать вывод комментариев и повысить скорость.
Использование REST API для отзывов
Если вы делаете SPA или мобильное приложение, можно расширить REST API WordPress, добавив поле рейтинга к комментариям и обеспечив поддержку иерархии через API. Пример добавления поля к REST API:
function wphierarchy_register_rating_in_rest() {
register_rest_field('comment', 'wphierarchy_rating', array(
'get_callback' => function($comment) {
return get_comment_meta($comment['id'], 'wphierarchy_rating', true);
},
'schema' => array(
'description' => 'Рейтинг отзыва',
'type' => 'integer',
'context' => array('view', 'edit')
),
));
}
add_action('rest_api_init', 'wphierarchy_register_rating_in_rest');
Вывод
Создание иерархии отзывов с поддержкой рейтингов в WordPress — задача вполне решаемая с помощью кастомного кода и подходящих плагинов. Важно правильно настроить форму отзывов, сохранить рейтинги и обеспечить удобный вывод с вложенностью. Это повысит качество отзывов и доверие пользователей к вашему сайту.
Для расширения возможностей рекомендуем посмотреть плагины на wpshop.ru — там есть решения для отзывов, рейтингов и оптимизации комментариев.