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

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

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

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

  • Минимум зависимостей и лишнего кода.
  • Лёгкую кастомизацию под уникальный дизайн.
  • Понимание каждого шага работы системы.

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

Создание таблицы для хранения отзывов и оценок в базе данных WordPress

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

function wordpressa_create_reviews_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wordpressa_reviews';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        post_id bigint(20) NOT NULL,
        user_name varchar(100) NOT NULL,
        user_email varchar(100) NOT NULL,
        review_text text NOT NULL,
        rating tinyint(1) NOT NULL,
        review_date datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
        PRIMARY KEY  (id)
    ) $charset_collate;";

    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );
}
register_activation_hook( __FILE__, 'wordpressa_create_reviews_table' );

Здесь мы создаём таблицу с полями для ID отзыва, ID поста, имени и email пользователя, текстом отзыва, рейтингом (от 1 до 5) и датой.

Вывод формы для добавления отзыва с оценкой на странице записи

Добавим форму в шаблон single.php или через шорткод, чтобы пользователи могли оставить отзыв.

function wordpressa_display_review_form( $post_id ) {
    if ( ! is_user_logged_in() ) {
        echo '<p>Пожалуйста, войдите, чтобы оставить отзыв.</p>';
        return;
    }
    ?>
    <form method="post" class="wordpressa-review-form">
        <input type="hidden" name="post_id" value="<?php echo esc_attr($post_id); ?>" />
        <p><label>Ваше имя:</label><br />
        <input type="text" name="user_name" required /></p>
        <p><label>Ваш email:</label><br />
        <input type="email" name="user_email" required /></p>
        <p><label>Оценка (1-5):</label><br />
        <select name="rating" required>
            <option value="">-- выберите --</option>
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
            <option value="5">5</option>
        </select></p>
        <p><label>Отзыв:</label><br />
        <textarea name="review_text" rows="5" required></textarea></p>
        <p><input type="submit" name="wordpressa_submit_review" value="Отправить отзыв" /></p>
    </form>
    <?php
}

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

Обработка и сохранение отзывов в базе данных

Добавим обработчик, который сохранит данные после отправки формы.

function wordpressa_handle_review_submission() {
    if ( isset($_POST['wordpressa_submit_review']) ) {
        global $wpdb;
        $table_name = $wpdb->prefix . 'wordpressa_reviews';

        $post_id = intval($_POST['post_id']);
        $user_name = sanitize_text_field($_POST['user_name']);
        $user_email = sanitize_email($_POST['user_email']);
        $review_text = sanitize_textarea_field($_POST['review_text']);
        $rating = intval($_POST['rating']);

        if ( $post_id && $user_name && $user_email && $review_text && $rating >= 1 && $rating <= 5 ) {
            $wpdb->insert(
                $table_name,
                [
                    'post_id' => $post_id,
                    'user_name' => $user_name,
                    'user_email' => $user_email,
                    'review_text' => $review_text,
                    'rating' => $rating,
                    'review_date' => current_time('mysql')
                ],
                [ '%d', '%s', '%s', '%s', '%d', '%s' ]
            );
            echo '<p>Спасибо за ваш отзыв!</p>';
        } else {
            echo '<p>Пожалуйста, заполните все поля корректно.</p>';
        }
    }
}
add_action('wp', 'wordpressa_handle_review_submission');

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

Вывод отзывов и средней оценки на странице записи

Теперь выведем все отзывы для текущего поста и посчитаем средний рейтинг.

function wordpressa_display_reviews( $post_id ) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wordpressa_reviews';

    $reviews = $wpdb->get_results( $wpdb->prepare("SELECT * FROM $table_name WHERE post_id = %d ORDER BY review_date DESC", $post_id) );

    if ( ! $reviews ) {
        echo '<p>Отзывов пока нет.</p>';
        return;
    }

    $total_rating = 0;
    $count = count($reviews);

    echo '<div class="wordpressa-reviews">';
    echo '<h3>Отзывы (' . $count . ')</h3>';

    foreach ( $reviews as $review ) {
        $total_rating += $review->rating;
        echo '<div class="wordpressa-review-item">';
        echo '<strong>' . esc_html( $review->user_name ) . '</strong> — <em>' . esc_html( date('d.m.Y', strtotime($review->review_date)) ) . '</em><br/>';
        echo '<span>Оценка: ' . intval($review->rating) . '/5</span><br/>';
        echo '<p>' . esc_html( $review->review_text ) . '</p>';
        echo '</div>';
    }

    $average = round($total_rating / $count, 2);
    echo '<p><strong>Средняя оценка: ' . $average . ' / 5</strong></p>';
    echo '</div>';
}

Выводите вызов wordpressa_display_reviews(get_the_ID()); под контентом записи.

Дополнительные советы и улучшения

1. Добавьте проверку nonce и капчу для защиты от спама.
2. Сделайте AJAX-отправку формы для улучшения UX.
3. Добавьте пагинацию для отзывов при большом их количестве.
4. Добавьте возможность модерации отзывов через админку WordPress.
5. Используйте пользовательские роли и права для ограничения доступа.

Если хотите расширить функционал, можно посмотреть на плагины как Clearfy Pro, который частично оптимизирует работу и безопасность сайта.

Таким образом, вы получите лёгкую, удобную и кастомную систему отзывов с рейтингом, полностью контролируемую вами, без лишних плагинов.

Как удалить и запретить удаление записей в WordPress
03.02.2026
Как сделать автоматический откат обновлений WordPress при ошибках
30.01.2026
Как сделать отзывы с оценками без плагинов
05.01.2026
Как удалить автоматические кэш и очистить браузер в WordPress: практические решения
13.02.2026
Решение проблемы неотображения изображений после миграции WordPress
14.05.2026