Как сделать оценку публикации в опросе WordPress с помощью кода

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

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

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

Создавая решение самостоятельно, вы получите:

  • Минимальный и оптимальный код, который не нагружает сайт.
  • Возможность адаптировать систему под свои нужды (например, добавлять вес оценки, разные критерии и т.д.).
  • Простоту интеграции с другими элементами — комментариями, рейтингами, выводом статистики.

Давайте рассмотрим, как сделать такую систему на примере простого рейтинга от 1 до 5 звёзд, добавленного к публикациям.

Добавление пользовательского поля для оценки публикации

Для начала нам нужно создать пользовательское поле, в котором будет храниться средняя оценка публикации и количество проголосовавших. Для этого используем мета-поля поста:

function wppolls_add_rating_meta($post_id, $rating) {
    $current_rating = (float) get_post_meta($post_id, '_wppolls_rating_avg', true);
    $votes = (int) get_post_meta($post_id, '_wppolls_rating_votes', true);
    
    $new_votes = $votes + 1;
    $new_rating = (($current_rating * $votes) + $rating) / $new_votes;
    
    update_post_meta($post_id, '_wppolls_rating_avg', $new_rating);
    update_post_meta($post_id, '_wppolls_rating_votes', $new_votes);
}

Функция wppolls_add_rating_meta принимает ID публикации и оценку (от 1 до 5), затем пересчитывает средний рейтинг и обновляет мета-поля.

Обработка голосов пользователя

Чтобы избежать повторного голосования с одного IP или пользователя, можно использовать cookie или мета-поля пользователя. Вот пример с cookie:

function wppolls_user_can_vote($post_id) {
    $cookie_name = 'wppolls_voted_' . $post_id;
    return !isset($_COOKIE[$cookie_name]);
}

function wppolls_set_vote_cookie($post_id) {
    $cookie_name = 'wppolls_voted_' . $post_id;
    setcookie($cookie_name, '1', time() + 3600 * 24 * 365, '/');
}

Проверяем наличие cookie перед добавлением оценки, и устанавливаем cookie после успешного голосования.

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

Создадим форму с выбором оценки от 1 до 5, которую можно вывести в шаблоне single.php или через шорткод:

function wppolls_rating_form() {
    global $post;
    if (!wppolls_user_can_vote($post->ID)) {
        return '<p>Вы уже голосовали за эту публикацию.</p>';
    }
    
    $html = '<form method="post" id="wppolls-rating-form">';
    $html .= '<label>Оцените публикацию:</label><br>';
    for ($i = 1; $i <= 5; $i++) {
        $html .= '<input type="radio" name="wppolls_rating" value="' . $i . '" id="wppolls_rating_' . $i . '" />';
        $html .= '<label for="wppolls_rating_' . $i . '">' . $i . '</label> ';
    }
    $html .= '<br><input type="submit" name="wppolls_submit_rating" value="Оценить" />';
    $html .= '</form>';
    
    return $html;
}
add_shortcode('wppolls_rating_form', 'wppolls_rating_form');

Вызов шорткода [wppolls_rating_form] выведет форму оценки. Далее обработаем отправку формы.

Обработка отправки формы и обновление рейтинга

Чтобы обработать отправку данных, добавим хук на init:

function wppolls_handle_rating_submission() {
    if (isset($_POST['wppolls_submit_rating']) && isset($_POST['wppolls_rating'])) {
        global $post;
        if (!$post) return;
        
        $post_id = $post->ID;
        $rating = intval($_POST['wppolls_rating']);
        if ($rating <= 0 || $rating > 5) return;
        
        if (!wppolls_user_can_vote($post_id)) {
            return;
        }
        
        wppolls_add_rating_meta($post_id, $rating);
        wppolls_set_vote_cookie($post_id);
        
        // Перенаправление на ту же страницу без POST
        wp_redirect(get_permalink($post_id));
        exit;
    }
}
add_action('init', 'wppolls_handle_rating_submission');

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

Вывод среднего рейтинга и количества голосов

Чтобы показать результаты оценки в шаблоне, создадим функцию вывода:

function wppolls_show_rating($post_id) {
    $avg = get_post_meta($post_id, '_wppolls_rating_avg', true);
    $votes = get_post_meta($post_id, '_wppolls_rating_votes', true);
    if (!$avg) {
        return '<p>Оценок пока нет.</p>';
    }
    $avg_rounded = round($avg, 1);
    
    $html = '<div class="wppolls-rating-result">';
    $html .= '<strong>Средняя оценка: </strong>' . $avg_rounded . ' / 5<br>';
    $html .= '<small>Голосов: ' . intval($votes) . '</small>';
    $html .= '</div>';
    
    return $html;
}

Выведите echo wppolls_show_rating(get_the_ID()); в нужном месте шаблона публикации.

Расширение функционала: интеграция с плагином Clearfy Pro для оптимизации

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

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

Итоги и рекомендации по внедрению оценки публикаций в опросах

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

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

Если хотите быстро и удобно управлять рейтингами и опросами, обратите внимание на специализированные решения в каталоге WPSHOP.ru.

Как создать прогноз по результатам опросов в WordPress
01.01.2026
Как создать простой опрос в WordPress с помощью плагинов
07.11.2025
Как сделать автоматический отчет по результатам опросов WordPress
13.12.2025
Как создать виджет опроса в WordPress с помощью кода
20.11.2025
Как создать расписание публикаций в WordPress: полный гайд
30.11.2025