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

|

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

Зачем нужны уникальные системы оценок в WordPress

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

Рассмотрим несколько подходов и примеров реализации.

Использование популярных плагинов для систем оценок

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

Все эти плагины доступны на WPSHOP.RU с удобной установкой и поддержкой.

Создание базовой системы оценок с помощью кода

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

Добавление интерфейса оценки в шаблон поста

Для начала выведем форму оценки в конце поста. Добавим следующий код в файл functions.php вашей темы или в отдельный плагин:

function yelly_add_rating_form($content) {
    if (is_single() && is_main_query()) {
        $post_id = get_the_ID();
        $rating = get_post_meta($post_id, '_yelly_rating', true);
        $rating = $rating ? intval($rating) : 0;
        $form = '<form method="post" class="yelly-rating-form">'
            . '<label>Оцените статью: </label>'
            . '<select name="yelly_rating" required>'
            . '<option value="">--Выберите--</option>'
            . '<option value="1"' . selected($rating,1,false) . '>1</option>'
            . '<option value="2"' . selected($rating,2,false) . '>2</option>'
            . '<option value="3"' . selected($rating,3,false) . '>3</option>'
            . '</select>'
            . wp_nonce_field('yelly_rating_nonce', 'yelly_rating_nonce_field', true, false)
            . '<input type="hidden" name="post_id" value="' . esc_attr($post_id) . '" />'
            . '<input type="submit" value="Оценить" />'
            . '</form>';
        return $content . $form;
    }
    return $content;
}
add_filter('the_content', 'yelly_add_rating_form');

Этот код добавит форму с выбором оценки 1, 2 или 3 после контента поста.

Обработка и сохранение оценки

Далее нужно сохранить выбранную оценку при отправке формы:

function yelly_handle_rating_submission() {
    if (
        isset($_POST['yelly_rating']) &&
        isset($_POST['post_id']) &&
        isset($_POST['yelly_rating_nonce_field']) &&
        wp_verify_nonce($_POST['yelly_rating_nonce_field'], 'yelly_rating_nonce')
    ) {
        $post_id = intval($_POST['post_id']);
        $rating = intval($_POST['yelly_rating']);
        if ($post_id && $rating >= 1 && $rating <= 3) {
            update_post_meta($post_id, '_yelly_rating', $rating);
            wp_safe_redirect(get_permalink($post_id));
            exit;
        }
    }
}
add_action('template_redirect', 'yelly_handle_rating_submission');

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

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

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

function yelly_add_rating_form($content) {
    if (is_single() && is_main_query()) {
        $post_id = get_the_ID();
        $votes = intval(get_post_meta($post_id, '_yelly_rating_votes', true));
        $sum = intval(get_post_meta($post_id, '_yelly_rating_sum', true));
        $average = $votes ? round($sum / $votes, 2) : '—';

        $rating_display = '<div class="yelly-rating-average">'
            . 'Средняя оценка: <strong>' . $average . '</strong> (' . $votes . ' голосов)</div>';

        $form = '<form method="post" class="yelly-rating-form">'
            . '<label>Оцените статью: </label>'
            . '<select name="yelly_rating" required>'
            . '<option value="">--Выберите--</option>'
            . '<option value="1">1</option>'
            . '<option value="2">2</option>'
            . '<option value="3">3</option>'
            . '</select>'
            . wp_nonce_field('yelly_rating_nonce', 'yelly_rating_nonce_field', true, false)
            . '<input type="hidden" name="post_id" value="' . esc_attr($post_id) . '" />'
            . '<input type="submit" value="Оценить" />'
            . '</form>';

        return $content . $rating_display . $form;
    }
    return $content;
}
add_filter('the_content', 'yelly_add_rating_form');

function yelly_handle_rating_submission() {
    if (
        isset($_POST['yelly_rating']) &&
        isset($_POST['post_id']) &&
        isset($_POST['yelly_rating_nonce_field']) &&
        wp_verify_nonce($_POST['yelly_rating_nonce_field'], 'yelly_rating_nonce')
    ) {
        $post_id = intval($_POST['post_id']);
        $rating = intval($_POST['yelly_rating']);
        if ($post_id && $rating >= 1 && $rating <= 3) {
            $votes = intval(get_post_meta($post_id, '_yelly_rating_votes', true));
            $sum = intval(get_post_meta($post_id, '_yelly_rating_sum', true));
            $votes++;
            $sum += $rating;
            update_post_meta($post_id, '_yelly_rating_votes', $votes);
            update_post_meta($post_id, '_yelly_rating_sum', $sum);
            wp_safe_redirect(get_permalink($post_id));
            exit;
        }
    }
}
add_action('template_redirect', 'yelly_handle_rating_submission');

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

Расширение функционала: мультикритериальные оценки

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

Пример формы с оценкой по трём критериям:

<form method="post" class="yelly-multi-rating-form">
  <label>Дизайн:</label>
  <select name="yelly_rating_design" required>
    <option value="">--Выберите--</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
  </select>
  <label>Функциональность:</label>
  <select name="yelly_rating_functionality" required>
    <option value="">--Выберите--</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
  </select>
  <label>Поддержка:</label>
  <select name="yelly_rating_support" required>
    <option value="">--Выберите--</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
  </select>
  <input type="hidden" name="post_id" value="<?php echo esc_attr(get_the_ID()); ?>" />
  <input type="submit" value="Оценить" />
</form>

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

Оптимизация и безопасность системы оценок

При реализации рейтингов важно учитывать:

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

Вывод рейтингов в списках и виджетах

Для повышения юзабилити можно выводить рейтинг не только в постах, но и в архивах, виджетах или в блоках товаров. Пример простого вывода среднего рейтинга в цикле:

while (have_posts()) : the_post();
    $votes = intval(get_post_meta(get_the_ID(), '_yelly_rating_votes', true));
    $sum = intval(get_post_meta(get_the_ID(), '_yelly_rating_sum', true));
    $average = $votes ? round($sum / $votes, 2) : '—';
    echo '<h2>' . get_the_title() . '</h2>';
    echo '<div>Средний рейтинг: ' . $average . '</div>';
endwhile;

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

Заключение

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

Как создать автоматическое меню в WordPress с применением AJAX
03.04.2026
Как создать собственный виджет в WordPress: практические примеры и советы
23.11.2025
Как создать динамическую картинку из текста в WordPress с примерами кода
25.02.2026
Как создать автообновляемый каталог товаров в WordPress с использованием AJAX
03.04.2026
Как использовать хуки и фильтры в WordPress для изменения выводимых данных
11.12.2025
×
День SEO
Время сделать подарок своему WordPress!
-20% на премиум

шаблоны и плагины

Порадуй свой сайт ⋙