Почему динамические отзывы важны для сайта на WordPress
Отзывы клиентов — один из ключевых факторов доверия и повышения конверсии на сайте. В отличие от статичных комментариев, динамические отзывы позволяют автоматически обновлять и сортировать отзывы, отображать их в разных форматах и интегрироваться с визуальными элементами сайта. Особенно это актуально для магазинов, сервисов и образовательных порталов.
Плагин Expert Review значительно упрощает работу с отзывами, предоставляя готовый функционал для сбора, модерации и отображения отзывов с оценками и дополнительными метаданными.
В этой статье мы подробно разберём, как настроить Expert Review для динамических отзывов, а также добавим кастомные функции для расширения возможностей плагина.
Установка и базовая настройка Expert Review
Для начала установим плагин Expert Review через админ-панель WordPress. Перейдите в раздел "Плагины" -> "Добавить новый", введите в поиске «Expert Review» и установите плагин от WPShop.
После активации перейдите в меню плагина и настройте основные параметры: выбор пост-типов, для которых будут собираться отзывы, параметры отображения рейтинга, шаблоны вывода.
Expert Review поддерживает несколько форматов вывода — виджет, шорткод, Gutenberg-блок. Для динамического вывода на страницах лучше использовать шорткод с параметрами.
Создание кастомного шорткода для динамических отзывов
Для более гибкого управления отзывами создадим собственный шорткод, который будет отображать отзывы с сортировкой и фильтрацией по дате и рейтингу.
Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:
function wpto_get_dynamic_reviews($atts) {
$atts = shortcode_atts(array(
'post_id' => get_the_ID(),
'orderby' => 'date', // Можно: date, rating
'order' => 'DESC',
'count' => 5
), $atts, 'wpto_dynamic_reviews');
$args = array(
'post_type' => 'wpexpert_review',
'posts_per_page' => intval($atts['count']),
'meta_query' => array(
array(
'key' => 'wpto_review_post_id',
'value' => intval($atts['post_id']),
'compare' => '='
)
),
'orderby' => $atts['orderby'],
'order' => $atts['order']
);
$reviews = new WP_Query($args);
if (!$reviews->have_posts()) return '<p>Отзывы отсутствуют.</p>';
$output = '<div class="wpto-dynamic-reviews">';
while ($reviews->have_posts()) {
$reviews->the_post();
$rating = get_post_meta(get_the_ID(), 'wpto_review_rating', true);
$author = get_post_meta(get_the_ID(), 'wpto_review_author', true);
$date = get_the_date('d.m.Y');
$content = get_the_content();
$output .= '<div class="review-item">';
$output .= '<div class="review-rating">Рейтинг: ' . esc_html($rating) . '/5</div>';
$output .= '<div class="review-author">Отзыв от: ' . esc_html($author) . '</div>';
$output .= '<div class="review-date">' . esc_html($date) . '</div>';
$output .= '<div class="review-content">' . wp_kses_post($content) . '</div>';
$output .= '</div>';
}
wp_reset_postdata();
$output .= '</div>';
return $output;
}
add_shortcode('wpto_dynamic_reviews', 'wpto_get_dynamic_reviews');Теперь на любой странице или записи вы можете вывести отзывы следующим образом:
[wpto_dynamic_reviews post_id=123 orderby="rating" order="DESC" count=10]
Этот шорткод покажет до 10 отзывов к посту с ID 123, отсортированных по рейтингу по убыванию.
Автоматическое обновление рейтингов и уведомления
Expert Review поддерживает автоматический подсчёт среднего рейтинга и вывод агрегированных данных. Но можно расширить функционал, добавив уведомления администратору при появлении новых отзывов и автоматическое обновление метаданных.
Вот пример функции, которая отправляет письмо после публикации нового отзыва:
function wpto_notify_admin_new_review($post_ID, $post) {
if ($post->post_type !== 'wpexpert_review') return;
$admin_email = get_option('admin_email');
$subject = 'Новый отзыв опубликован';
$message = 'Опубликован новый отзыв с ID: ' . $post_ID . '. Проверьте модерацию.';
wp_mail($admin_email, $subject, $message);
}
add_action('publish_wpexpert_review', 'wpto_notify_admin_new_review', 10, 2);Также полезно обновлять средний рейтинг родительского поста при изменении отзывов. Для этого используйте хук сохранения:
function wpto_update_parent_post_rating($post_id) {
if (get_post_type($post_id) !== 'wpexpert_review') return;
$parent_id = get_post_meta($post_id, 'wpto_review_post_id', true);
if (!$parent_id) return;
$reviews = get_posts(array(
'post_type' => 'wpexpert_review',
'meta_key' => 'wpto_review_post_id',
'meta_value' => $parent_id,
'fields' => 'ids'
));
if (!$reviews) return;
$total_rating = 0;
$count = count($reviews);
foreach ($reviews as $review_id) {
$rating = (int) get_post_meta($review_id, 'wpto_review_rating', true);
$total_rating += $rating;
}
$average = round($total_rating / $count, 2);
update_post_meta($parent_id, 'wpto_average_rating', $average);
}
add_action('save_post_wpexpert_review', 'wpto_update_parent_post_rating');Интеграция с темой и стилизация отзывов
Для гармоничного отображения динамических отзывов добавьте CSS стили в файл style.css темы:
.wpto-dynamic-reviews {
background: #f9f9f9;
padding: 15px;
border-radius: 5px;
margin-bottom: 20px;
}
.review-item {
border-bottom: 1px solid #ddd;
padding: 10px 0;
}
.review-rating {
font-weight: bold;
color: #ff9800;
}
.review-author, .review-date {
font-size: 0.9em;
color: #555;
}
.review-content {
margin-top: 5px;
font-size: 1em;
color: #333;
}
Если вы используете темы Reboot или Root от WPShop, стилизация будет работать из коробки, но при необходимости вы можете расширить их.
Заключение по созданию динамических отзывов
Создание динамических отзывов с помощью Expert Review — это удобный и мощный способ повысить доверие посетителей и улучшить взаимодействие с сайтом. Используя встроенные возможности плагина и добавляя свои расширения через шорткоды и хуки, вы получаете полный контроль над выводом и обработкой отзывов.
Рекомендуется использовать уведомления и автоматические обновления рейтингов, чтобы администратор всегда был в курсе новых отзывов, а пользователи видели актуальную информацию. Не забывайте про стилизацию для соответствия дизайну сайта.