Автоматическое отображение отзывов на сайте — важный элемент, который помогает повысить доверие посетителей и улучшить конверсию. В этой статье мы разберем, как реализовать автоматическое отображение отзывов в WordPress с помощью пользовательского кода и популярных плагинов, а также рассмотрим практические примеры и советы по оптимизации.
Почему важно автоматизировать вывод отзывов
Ручное добавление отзывов — трудоемкий процесс, который со временем становится неудобным, особенно если отзывов много. Автоматизация позволяет:
- Обновлять отзывы без ручного вмешательства;
- Выводить отзывы из разных источников, например, из базы данных или внешних сервисов;
- Форматировать отзывы единообразно и красиво;
- Добавлять фильтры и сортировку для удобства пользователей.
Давайте рассмотрим, как можно реализовать такую систему в WordPress.
Создание пользовательского типа записей для отзывов
Первый шаг — создать отдельный тип записей для отзывов. Это позволит удобно управлять ими через админку и выводить на сайте.
<?php
// Регистрация пользовательского типа записи Отзывы
function wpfreecourses_register_reviews_post_type() {
$labels = array(
'name' => 'Отзывы',
'singular_name' => 'Отзыв',
'menu_name' => 'Отзывы',
'name_admin_bar' => 'Отзыв',
'add_new' => 'Добавить отзыв',
'add_new_item' => 'Добавить новый отзыв',
'edit_item' => 'Редактировать отзыв',
'new_item' => 'Новый отзыв',
'view_item' => 'Просмотреть отзыв',
'search_items' => 'Поиск отзывов',
'not_found' => 'Отзывы не найдены',
'not_found_in_trash' => 'Отзывы не найдены в корзине'
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'reviews'),
'show_in_rest' => true,
'supports' => array('title', 'editor', 'author', 'thumbnail'),
'menu_position' => 20,
'menu_icon' => 'dashicons-testimonial'
);
register_post_type('wpfreecourses_review', $args);
}
add_action('init', 'wpfreecourses_register_reviews_post_type');
Этот код регистрирует тип записи wpfreecourses_review с поддержкой заголовков, содержимого, миниатюр и автора. Теперь в админке появится раздел «Отзывы».
Добавление мета-полей для оценки и данных клиента
Отзывы обычно содержат не только текст, но и рейтинг, имя клиента, дату и другие данные. Добавим мета-поля с помощью стандартного API.
<?php
// Регистрируем мета-поля
function wpfreecourses_add_review_meta_boxes() {
add_meta_box(
'wpfreecourses_review_details',
'Детали отзыва',
'wpfreecourses_review_meta_box_callback',
'wpfreecourses_review',
'normal',
'high'
);
}
add_action('add_meta_boxes', 'wpfreecourses_add_review_meta_boxes');
function wpfreecourses_review_meta_box_callback($post) {
wp_nonce_field('wpfreecourses_save_review_meta', 'wpfreecourses_review_meta_nonce');
$rating = get_post_meta($post->ID, '_wpfreecourses_review_rating', true);
$client_name = get_post_meta($post->ID, '_wpfreecourses_review_client_name', true);
echo '<p><label>Рейтинг (1-5):</label> <input type="number" name="wpfreecourses_review_rating" min="1" max="5" value="' . esc_attr($rating) . '" /></p>';
echo '<p><label>Имя клиента:</label> <input type="text" name="wpfreecourses_review_client_name" value="' . esc_attr($client_name) . '" /></p>';
}
// Сохраняем мета-поля
function wpfreecourses_save_review_meta($post_id) {
if (!isset($_POST['wpfreecourses_review_meta_nonce']) || !wp_verify_nonce($_POST['wpfreecourses_review_meta_nonce'], 'wpfreecourses_save_review_meta')) {
return;
}
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if (isset($_POST['wpfreecourses_review_rating'])) {
update_post_meta($post_id, '_wpfreecourses_review_rating', intval($_POST['wpfreecourses_review_rating']));
}
if (isset($_POST['wpfreecourses_review_client_name'])) {
update_post_meta($post_id, '_wpfreecourses_review_client_name', sanitize_text_field($_POST['wpfreecourses_review_client_name']));
}
}
add_action('save_post', 'wpfreecourses_save_review_meta');
Теперь при создании отзыва можно указывать рейтинг и имя клиента.
Вывод отзывов на сайте с пагинацией и фильтрацией
Для отображения отзывов создадим шорткод, который автоматически выводит отзывы с сортировкой по дате и пагинацией.
<?php
// Шорткод для вывода отзывов
function wpfreecourses_reviews_shortcode($atts) {
$atts = shortcode_atts(array(
'posts_per_page' => 5,
'paged' => 1
), $atts, 'wpfreecourses_reviews');
if (get_query_var('paged')) {
$paged = get_query_var('paged');
} else {
$paged = 1;
}
$args = array(
'post_type' => 'wpfreecourses_review',
'posts_per_page' => intval($atts['posts_per_page']),
'paged' => $paged,
'orderby' => 'date',
'order' => 'DESC'
);
$query = new WP_Query($args);
ob_start();
if ($query->have_posts()) {
echo '<div class="wpfreecourses-reviews">';
while ($query->have_posts()) : $query->the_post();
$rating = intval(get_post_meta(get_the_ID(), '_wpfreecourses_review_rating', true));
$client_name = esc_html(get_post_meta(get_the_ID(), '_wpfreecourses_review_client_name', true));
echo '<div class="wpfreecourses-review-item">';
echo '<h3>' . get_the_title() . '</h3>';
echo '<div class="wpfreecourses-review-rating">';
for ($i = 0; $i < 5; $i++) {
echo $i < $rating ? '★' : '☆'; // звезды
}
echo '</div>';
echo '<p>' . get_the_content() . '</p>';
echo '<small>От: ' . $client_name . '</small>';
echo '</div>';
endwhile;
echo '</div>';
// Пагинация
$big = 999999999;
echo paginate_links(array(
'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
'format' => '?paged=%#%',
'current' => max(1, $paged),
'total' => $query->max_num_pages
));
} else {
echo '<p>Отзывы не найдены.</p>';
}
wp_reset_postdata();
return ob_get_clean();
}
add_shortcode('wpfreecourses_reviews', 'wpfreecourses_reviews_shortcode');
Для вывода отзывов просто вставьте [wpfreecourses_reviews] в нужное место на странице или в записи.
Использование плагина Expert Review для расширенного управления отзывами
Если нужно более быстрое и мощное решение, обратите внимание на плагин Expert Review от WPShop. Он позволяет:
- Создавать красивые блоки отзывов с разными стилями;
- Добавлять рейтинги и отзывы с возможностью модерирования;
- Встраивать отзывы через шорткоды и виджеты;
- Поддерживает интеграцию с Gutenberg и Elementor.
Плагин отлично подойдет, если вам нужно быстро получить готовое решение с минимальной настройкой.
Советы по оптимизации и безопасности
Чтобы отзывы работали корректно и не замедляли сайт, учитывайте следующие моменты:
- Используйте Transients API для кеширования результатов запросов к отзывам, чтобы снизить нагрузку на базу данных;
- Ограничьте количество отзывов на странице и внедрите пагинацию для удобства пользователей;
- Обязательно проверяйте и очищайте входящие данные, чтобы избежать XSS-уязвимостей;
- Резервируйте регулярные бэкапы базы данных, чтобы не потерять отзывы при ошибках;
- Для отзывов от реальных пользователей добавьте валидацию и капчу в формы отправки.
Заключение
Автоматическое отображение отзывов в WordPress — задача, которую можно решить как через пользовательский код, создавая кастомный тип записей и шорткоды, так и с помощью специализированных плагинов, например, Expert Review. Выбор зависит от ваших задач и опыта. В любом случае, качественно реализованные отзывы помогут повысить доверие и улучшить UX сайта.