Как создать отзывы с оценкой в WordPress: подробный пример и код

Отзывы с оценкой — один из важных элементов для многих сайтов на WordPress, особенно если речь идет о товарах, услугах или контенте, где важно мнение пользователей. В этой статье расскажу, как самостоятельно создать на сайте функционал для сбора отзывов с оценкой, без использования громоздких плагинов, а также с примерами кода и рекомендациями по расширениям.

Почему стоит создавать отзывы с оценкой самостоятельно?

Готовые плагины могут быть удобны, но не всегда подходят по функционалу и дизайну, часто добавляют лишний код и замедляют сайт. К тому же, создание собственного решения даст полный контроль и позволит интегрировать отзывы в любые части сайта — от карточек товаров до страниц блога.

Кроме того, это полезно для понимания работы с метаполями, AJAX и безопасностью в WordPress.

Создаем пользовательский тип записей для отзывов

Для удобства и структурированности создадим отдельный тип записей "Отзывы". Это позволит легко управлять ими через админку и выводить в любом месте сайта.

function wpkpi_register_reviews_cpt() {
    $labels = array(
        'name' => 'Отзывы',
        'singular_name' => 'Отзыв',
        '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,
        'supports' => array('title', 'editor', 'author'),
        'show_in_rest' => true,
    );

    register_post_type('wpkpi_review', $args);
}
add_action('init', 'wpkpi_register_reviews_cpt');

Этот код нужно добавить в functions.php вашей темы или в отдельный плагин. Тип записи wpkpi_review станет основой для хранения отзывов.

Добавляем метаполе для оценки (рейтинг)

Для каждого отзыва нужна оценка — число от 1 до 5. Создадим метабокс в админке для ввода оценки.

function wpkpi_add_rating_metabox() {
    add_meta_box(
        'wpkpi_rating_meta',
        'Оценка',
        'wpkpi_rating_metabox_callback',
        'wpkpi_review',
        'side',
        'default'
    );
}
add_action('add_meta_boxes', 'wpkpi_add_rating_metabox');

function wpkpi_rating_metabox_callback($post) {
    wp_nonce_field('wpkpi_save_rating_meta', 'wpkpi_rating_nonce');
    $value = get_post_meta($post->ID, '_wpkpi_rating', true);
    echo '<label for="wpkpi_rating_field">Оценка (1-5): </label>';
    echo '<input type="number" id="wpkpi_rating_field" name="wpkpi_rating_field" min="1" max="5" value="'.esc_attr($value).'" style="width:50px;">';
}

function wpkpi_save_rating_meta($post_id) {
    if (!isset($_POST['wpkpi_rating_nonce']) || !wp_verify_nonce($_POST['wpkpi_rating_nonce'], 'wpkpi_save_rating_meta')) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (isset($_POST['wpkpi_rating_field'])) {
        $rating = intval($_POST['wpkpi_rating_field']);
        if ($rating < 1) $rating = 1;
        if ($rating > 5) $rating = 5;
        update_post_meta($post_id, '_wpkpi_rating', $rating);
    }
}
add_action('save_post', 'wpkpi_save_rating_meta');

Этот код добавляет поле для рейтинга при редактировании отзыва и сохраняет его корректно.

Вывод отзывов с рейтингом на фронтенде

Теперь нужно вывести отзывы с оценкой на сайте. Сделаем простой шаблон вывода с HTML и звездочками.

function wpkpi_display_reviews() {
    $args = array(
        'post_type' => 'wpkpi_review',
        'posts_per_page' => 10,
        'orderby' => 'date',
        'order' => 'DESC'
    );
    $reviews = new WP_Query($args);

    if ($reviews->have_posts()) {
        echo '<div class="wpkpi-reviews">';
        while ($reviews->have_posts()) {
            $reviews->the_post();
            $rating = get_post_meta(get_the_ID(), '_wpkpi_rating', true);
            echo '<div class="wpkpi-review-item">';
            echo '<h3>'.get_the_title().'</h3>';
            echo '<div class="wpkpi-rating">'.wpkpi_get_rating_stars($rating).'</div>';
            echo '<div class="wpkpi-review-content">'.get_the_content().''.'</div>';
            echo '</div>';
        }
        echo '</div>';
    } else {
        echo 'Отзывы пока отсутствуют.';
    }
    wp_reset_postdata();
}

function wpkpi_get_rating_stars($rating) {
    $rating = intval($rating);
    $output = '';
    for ($i = 1; $i <= 5; $i++) {
        if ($i <= $rating) {
            $output .= '<span style="color:#f5a623;">★</span>'; // звезда заполненная
        } else {
            $output .= '<span style="color:#ccc;">★</span>'; // пустая звезда
        }
    }
    return $output;
}

Вызвать wpkpi_display_reviews() можно в любом шаблоне, где нужно показать отзывы.

Добавляем форму отправки отзывов с AJAX

Чтобы пользователи могли оставлять отзывы прямо на сайте без перезагрузки, добавим форму с AJAX.

HTML формы:

<form id="wpkpi_review_form">
    <label>Заголовок отзыва:</label><br>
    <input type="text" name="title" required><br>
    <label>Текст отзыва:</label><br>
    <textarea name="content" required></textarea><br>
    <label>Оценка (1-5):</label><br>
    <input type="number" name="rating" min="1" max="5" required><br>
    <button type="submit">Отправить</button>
</form>
<div id="wpkpi_review_message"></div>

JavaScript для AJAX (лучше добавить в отдельный файл и подключить через wp_enqueue_script):

jQuery(document).ready(function($){
    $('#wpkpi_review_form').on('submit', function(e){
        e.preventDefault();
        var data = {
            action: 'wpkpi_submit_review',
            title: $(this).find('input[name="title"]').val(),
            content: $(this).find('textarea[name="content"]').val(),
            rating: $(this).find('input[name="rating"]').val(),
            security: wpkpi_ajax_object.nonce
        };
        $.post(wpkpi_ajax_object.ajax_url, data, function(response) {
            $('#wpkpi_review_message').html(response.data.message);
            if(response.success){
                $('#wpkpi_review_form')[0].reset();
            }
        });
    });
});

PHP обработчик AJAX:

function wpkpi_ajax_submit_review() {
    check_ajax_referer('wpkpi_ajax_nonce', 'security');

    $title = sanitize_text_field($_POST['title']);
    $content = sanitize_textarea_field($_POST['content']);
    $rating = intval($_POST['rating']);

    if (empty($title) || empty($content) || $rating < 1 || $rating > 5) {
        wp_send_json_error(array('message' => 'Некорректные данные.')); 
    }

    $new_review = array(
        'post_title' => $title,
        'post_content' => $content,
        'post_status' => 'pending', // чтобы админ проверил
        'post_type' => 'wpkpi_review'
    );

    $post_id = wp_insert_post($new_review);

    if (is_wp_error($post_id)) {
        wp_send_json_error(array('message' => 'Ошибка при добавлении отзыва.'));
    }

    update_post_meta($post_id, '_wpkpi_rating', $rating);

    wp_send_json_success(array('message' => 'Спасибо за отзыв! Он будет опубликован после проверки.'));
}
add_action('wp_ajax_wpkpi_submit_review', 'wpkpi_ajax_submit_review');
add_action('wp_ajax_nopriv_wpkpi_submit_review', 'wpkpi_ajax_submit_review');

Не забудьте локализовать скрипт, передав ajax_url и nonce:

function wpkpi_enqueue_scripts() {
    wp_enqueue_script('wpkpi-review-script', get_template_directory_uri() . '/js/wpkpi-review.js', array('jquery'), null, true);
    wp_localize_script('wpkpi-review-script', 'wpkpi_ajax_object', array(
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce' => wp_create_nonce('wpkpi_ajax_nonce')
    ));
}
add_action('wp_enqueue_scripts', 'wpkpi_enqueue_scripts');

Рекомендации по плагинам для расширения функционала

Если хочется более продвинутого функционала без написания собственного кода, рекомендую обратить внимание на следующие плагины:

  • Expert Review — мощный плагин для отзывов с рейтингом и кастомной разметкой.
  • Clearfy Pro — включает инструменты оптимизации и безопасности, полезно для защиты отзывов от спама.

Использование таких плагинов подойдет, если нужно быстро запустить отзывы с минимальными усилиями и получить готовые стили и функционал.

Заключение

Создание отзывов с оценкой на WordPress — задача, которую можно решить и самостоятельно, и с помощью плагинов. Если нужно гибкое, легковесное и кастомное решение, лучше писать функционал с нуля, как в примерах выше. Это даст свободу и понимание, как все устроено.

Если же хочется быстро и с расширенным функционалом, Expert Review — отличный выбор.

Главное — обеспечить удобство для пользователей и простоту управления отзывами в админке.

Как установить лимит поисковых запросов в WordPress
04.03.2026
Как создать автоматический сбор данных KPI в WordPress с примерами кода
12.03.2026
Как отладить проблемы с отправкой форм в WordPress
01.04.2026
WooCommerce: автоматическое изменение статуса заказа при проблемах с платежами
18.06.2026
WooCommerce: автоматическое удаление заказов по истечении срока
04.06.2026