Отзывами на сайте можно значительно повысить доверие посетителей и улучшить конверсию. Однако, когда отзывов становится много, их просмотр и управление могут осложниться. В этой статье разберём, как автоматизировать процесс отображения отзывов на WordPress, используя популярные плагины и собственные технические решения с примерами кода.
Почему важна автоматизация просмотра отзывов на WordPress
Если на вашем сайте отзывы размещают клиенты или пользователи, со временем их число растёт. Ручное обновление страниц с отзывами — трудоёмкий процесс, который может привести к ошибкам и задержкам в публикации новых отзывов. Автоматизация позволяет:
- Обеспечить актуальность отзывов без ручного вмешательства;
- Сортировать и фильтровать отзывы по дате, рейтингу или теме;
- Отображать отзывы в удобном формате — с пагинацией, слайдерами, фильтрами;
- Интегрировать отзывы с другими сервисами и социальными сетями.
Рассмотрим несколько подходов и инструментов для автоматизации.
Использование плагина WPRemark для автоматического отображения отзывов
Плагин WPRemark — мощный инструмент для сбора и отображения отзывов на сайте. Он поддерживает рейтинги, модерацию, уведомления и удобный вывод отзывов на страницах.
Основные возможности WPRemark
- Автоматическое обновление списка отзывов после добавления новых;
- Возможность фильтрации по рейтингу и дате;
- Шорткод для вывода отзывов в любом месте сайта;
- Поддержка AJAX-загрузки для динамического обновления без перезагрузки страницы;
- Интеграция с WooCommerce для отзывов о товарах.
Пример использования шорткода WPRemark
Чтобы вывести последние 10 отзывов с рейтингом не ниже 4, используйте шорткод:
[wpremark_reviews limit="10" min_rating="4"]
Этот шорткод можно вставить в любую страницу или запись.
Добавление автоматического обновления отзывов через AJAX
Если хотите сделать просмотр отзывов максимально удобным, можно реализовать динамическую подгрузку новых отзывов без перезагрузки страницы. Ниже пример простого AJAX-обработчика для WPRemark.
PHP-код для AJAX-обработчика в functions.php
add_action('wp_ajax_wpsell_load_reviews', 'wpsell_ajax_load_reviews');
add_action('wp_ajax_nopriv_wpsell_load_reviews', 'wpsell_ajax_load_reviews');
function wpsell_ajax_load_reviews() {
$paged = isset($_POST['page']) ? intval($_POST['page']) : 1;
$args = [
'post_type' => 'wpremark_review',
'posts_per_page' => 5,
'paged' => $paged,
'meta_query' => [
[
'key' => 'wpremark_rating',
'value' => 3,
'compare' => '>='
]
]
];
$query = new WP_Query($args);
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
echo '<div class="review-item">';
echo '<h4>' . get_the_title() . '</h4>';
echo '<p>' . get_the_content() . '</p>';
echo '<div>Рейтинг: ' . get_post_meta(get_the_ID(), 'wpremark_rating', true) . '</div>';
echo '</div>';
}
} else {
echo '<p>Отзывы не найдены.</p>';
}
wp_die();
}
JavaScript для подгрузки отзывов
jQuery(document).ready(function($) {
var page = 1;
$('#load-more-reviews').on('click', function() {
page++;
$.post(
wpsell_ajax_object.ajax_url,
{
action: 'wpsell_load_reviews',
page: page
},
function(response) {
if(response.trim() !== '<p>Отзывы не найдены.</p>') {
$('#reviews-container').append(response);
} else {
$('#load-more-reviews').hide();
}
}
);
});
});
HTML-разметка для контейнера и кнопки
<div id="reviews-container">
<!-- Здесь загружаются отзывы -->
</div>
<button id="load-more-reviews">Загрузить ещё отзывы</button>
Не забудьте локализовать скрипт, чтобы передать переменную wpsell_ajax_object.ajax_url из PHP в JS.
Использование кастомного типа записей и метаданных для отзывов
Если по каким-то причинам WPRemark не подходит, можно создать собственную систему отзывов с помощью кастомного типа записей и метаполей. Это даёт полный контроль над функционалом и дизайном.
Регистрация кастомного типа записей "Отзыв"
function wpsell_register_review_cpt() {
$labels = [
'name' => 'Отзывы',
'singular_name' => 'Отзыв',
'add_new' => 'Добавить отзыв',
'add_new_item' => 'Добавить новый отзыв',
'edit_item' => 'Редактировать отзыв',
'new_item' => 'Новый отзыв',
'view_item' => 'Просмотреть отзыв',
'search_items' => 'Искать отзывы',
'not_found' => 'Отзывы не найдены',
'not_found_in_trash' => 'В корзине отзывы не найдены',
];
$args = [
'labels' => $labels,
'public' => true,
'has_archive' => true,
'supports' => ['title', 'editor', 'custom-fields'],
'menu_position' => 20,
'menu_icon' => 'dashicons-testimonial',
];
register_post_type('wpsell_review', $args);
}
add_action('init', 'wpsell_register_review_cpt');
Добавление метаполя рейтинга
Для рейтинга используем поле с числом от 1 до 5. Добавим метабокс с контролом:
function wpsell_add_rating_metabox() {
add_meta_box('wpsell_rating_metabox', 'Рейтинг отзыва', 'wpsell_rating_metabox_callback', 'wpsell_review', 'side', 'default');
}
add_action('add_meta_boxes', 'wpsell_add_rating_metabox');
function wpsell_rating_metabox_callback($post) {
$rating = get_post_meta($post->ID, '_wpsell_rating', true);
echo '<label for="wpsell_rating_field">Рейтинг (1-5):</label> ';
echo '<input type="number" id="wpsell_rating_field" name="wpsell_rating_field" min="1" max="5" value="' . esc_attr($rating) . '" />';
}
function wpsell_save_rating_meta($post_id) {
if ( isset($_POST['wpsell_rating_field']) ) {
$rating = intval($_POST['wpsell_rating_field']);
if ($rating >= 1 && $rating <= 5) {
update_post_meta($post_id, '_wpsell_rating', $rating);
}
}
}
add_action('save_post', 'wpsell_save_rating_meta');
Вывод отзывов с сортировкой по рейтингу
Выведем отзывы с рейтингом не ниже 4 с пагинацией:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = [
'post_type' => 'wpsell_review',
'posts_per_page' => 5,
'paged' => $paged,
'meta_query' => [
[
'key' => '_wpsell_rating',
'value' => 4,
'compare' => '>='
]
],
'orderby' => 'meta_value_num',
'order' => 'DESC'
];
$reviews = new WP_Query($args);
if ($reviews->have_posts()) {
while ($reviews->have_posts()) {
$reviews->the_post();
$rating = get_post_meta(get_the_ID(), '_wpsell_rating', true);
echo '<div class="review-item">';
echo '<h3>' . get_the_title() . '</h3>';
echo '<p>' . get_the_content() . '</p>';
echo '<div>Рейтинг: ' . esc_html($rating) . '</div>';
echo '</div>';
}
// пагинация
echo paginate_links(['total' => $reviews->max_num_pages]);
} else {
echo '<p>Отзывы не найдены.</p>';
}
wp_reset_postdata();
Советы по оптимизации и безопасности отзывов
Автоматизация должна учитывать безопасность и производительность:
- Проверяйте и фильтруйте данные из форм отзывов, чтобы избежать XSS и SQL-инъекций;
- Настройте модерацию, чтобы предотвратить спам и нежелательные отзывы;
- Используйте кэширование для ускорения загрузки страниц с отзывами;
- Оптимизируйте запросы, особенно если отзывов много — используйте индексы по метаполям;
- Регулярно обновляйте плагины и темы для безопасности.
Для дополнительной автоматизации можно интегрировать отзывы с сервисами аналитики и CRM, что повысит эффективность работы с клиентами.