Как сделать отзывы с оценками в WordPress без плагинов

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

Почему стоит делать отзывы без плагинов

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

Плюсы собственного решения:

  • Минимальная нагрузка на сайт.
  • Полный контроль над функционалом.
  • Возможность интеграции с темой и другими элементами сайта.

Минусы – потребуется немного времени на реализацию и поддержку, но это окупается гибкостью и скоростью.

Создаем структуру отзывов с оценками

Для начала нужно добавить в комментарии дополнительное поле для оценки и сохранить его. Обратимся к хукам WordPress.

Добавление поля оценки в форму комментариев

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

function wordpresses_add_rating_field() {
    echo '<p class="comment-form-rating"><label for="rating">Оценка: <span class="required">*</span></label>
    <select name="rating" id="rating" required>
        <option value="">Выберите оценку</option>
        <option value="5">5 - Отлично</option>
        <option value="4">4 - Хорошо</option>
        <option value="3">3 - Удовлетворительно</option>
        <option value="2">2 - Плохо</option>
        <option value="1">1 - Очень плохо</option>
    </select></p>';
}
add_action('comment_form_logged_in_after', 'wordpresses_add_rating_field');
add_action('comment_form_after_fields', 'wordpresses_add_rating_field');

Так мы добавили в форму комментария выпадающий список с оценками от 1 до 5.

Сохраняем рейтинг в метаданные комментария

Когда пользователь отправляет комментарий, необходимо сохранить его оценку в мета поля комментария. Для этого используем хук comment_post.

function wordpresses_save_comment_rating($comment_id) {
    if (isset($_POST['rating']) && $_POST['rating'] !== '') {
        $rating = intval($_POST['rating']);
        if ($rating >= 1 && $rating <= 5) {
            add_comment_meta($comment_id, 'wordpresses_rating', $rating);
        }
    }
}
add_action('comment_post', 'wordpresses_save_comment_rating');

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

Отображение рейтинга в отзывах

Следующий шаг – показывать оценку рядом с комментарием. Для этого можно воспользоваться фильтром comment_text или изменить шаблон комментариев в вашей теме.

function wordpresses_display_rating_in_comment($comment_text, $comment) {
    $rating = get_comment_meta($comment->comment_ID, 'wordpresses_rating', true);
    if ($rating) {
        $stars = str_repeat('★', $rating) . str_repeat('☆', 5 - $rating); // filled and empty stars
        $comment_text = '<div class="wordpresses-rating" title="Оценка: ' . esc_attr($rating) . '">' . $stars . '</div>' . $comment_text;
    }
    return $comment_text;
}
add_filter('comment_text', 'wordpresses_display_rating_in_comment', 10, 2);

Этот код добавит звездный рейтинг перед текстом комментария. Можно стилизовать блок .wordpresses-rating в CSS для лучшего отображения.

Расчет и вывод средней оценки объекта

Чтобы показать средний рейтинг поста (товара, услуги и т.п.), нужно получить все оценки из комментариев и вычислить среднее.

function wordpresses_get_average_rating($post_id) {
    global $wpdb;
    $ratings = $wpdb->get_col($wpdb->prepare(
        "SELECT meta_value FROM {$wpdb->commentmeta} 
        JOIN {$wpdb->comments} ON {$wpdb->commentmeta}.comment_id = {$wpdb->comments}.comment_ID 
        WHERE meta_key = 'wordpresses_rating' AND comment_post_ID = %d AND comment_approved = 1",
        $post_id
    ));
    if (empty($ratings)) return 0;
    $ratings = array_map('intval', $ratings);
    return round(array_sum($ratings) / count($ratings), 2);
}

Далее средний рейтинг можно вывести в шаблоне:

$avg_rating = wordpresses_get_average_rating(get_the_ID());
echo '<p>Средняя оценка: <strong>' . $avg_rating . '</strong></p>';

Возможности для улучшения и расширения

Такое базовое решение можно развивать:

  • Добавить валидацию и защиту от повторного голосования.
  • Добавить AJAX-отправку отзывов для удобства.
  • Сделать систему модерации оценок.
  • Интегрировать отображение рейтинга в микроразметку Schema.org для улучшения SEO.
  • Использовать готовые компоненты из тем, например, темы Reboot, которые позволяют красиво выводить отзывы.

Если вы хотите усилить функционал отзывов, можно рассмотреть и плагины из коллекции WPShop, например, Expert Review – плагин для расширенных отзывов с рейтингами и экспертными оценками.

Выводы и рекомендации

Создание отзывов с оценками без плагинов – реально и достаточно просто. Такой подход позволяет избежать лишнего «мусора» и держать сайт легким и быстрым. Главное – корректно обрабатывать и валидировать данные, а также грамотно выводить рейтинг для пользователей.

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

Автоподстановка значений в шаблоны WordPress: практические методы и примеры
12.03.2026
Как создать настройки плагинов в WordPress
14.11.2025
WooCommerce: как автоматически удалять просроченные заказы
26.04.2026
Как создать динамический список постов с фильтром по таксономии в WordPress
13.01.2026
Как автоматизировать процесс обновления плагинов WordPress без риска
03.01.2026