Как создать автоматическое отображение отзывов в WordPress

Автоматическое отображение отзывов на сайте — важный элемент, который помогает повысить доверие посетителей и улучшить конверсию. В этой статье мы разберем, как реализовать автоматическое отображение отзывов в 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 сайта.

Как создать многоуровневую навигацию в WordPress с помощью кода и плагинов
24.03.2026
WooCommerce: как автоматически отключить отгрузку заказа после оплаты
19.05.2026
Как использовать WPCommunity для создания профессионального форума на WordPress
30.12.2025
Как автоматически удалять старые записи в WordPress с применением WP-CLI
19.02.2026
Как безопасно удалить старые версии плагинов WordPress и освободить место
09.02.2026