Во многих проектах на WordPress возникает необходимость добавить систему оценок для контента, товаров или услуг. Это помогает собрать отзывы и повысить вовлечённость посетителей. В этой статье разберём, как вывести оценки пользователей с помощью популярных плагинов, а также создадим собственное решение с помощью кода.
Почему важно выводить оценки пользователей в WordPress
Оценки помогают посетителям быстро понять качество статьи, товара или услуги. Визуальное отображение рейтинга повышает доверие и способствует увеличению конверсий. Для разработчиков важно уметь гибко настраивать вывод оценок, чтобы интегрировать их в дизайн сайта и логику проекта.
Вывод оценок может быть реализован разными способами — от использования готовых плагинов до создания собственного функционала с сохранением данных в мета-полях и выводом через шорткоды или хуки.
Популярные плагины для системы оценок в WordPress
WP Review Pro
Плагин WP Review Pro — мощное решение для добавления отзывов и рейтингов. Поддерживает несколько типов оценок: звёзды, баллы, проценты. Позволяет выводить оценки в сниппетах Google и кастомизировать дизайн.
Плагин прост в использовании, есть интеграция с WooCommerce и популярными темами.
Rating-Widget: Star Review System
Ещё один популярный плагин — Rating-Widget. Он позволяет вставлять звёздные оценки на страницы, записи, комментарии и даже в sidebar. Плагин бесплатный с платным расширением для дополнительных функций.
Как выбрать плагин
При выборе плагина обратите внимание на совместимость с вашей темой и другими плагинами, наличие поддержки и регулярных обновлений, а также на удобство интеграции с вашим контентом.
Как вывести оценки пользователей без плагинов: пример кода
Если вы хотите реализовать систему оценок самостоятельно, можно хранить оценки в мета-полях поста и выводить их с помощью шорткодов и AJAX-запросов.
Создание мета-поля для оценки
Для начала добавим кастомное поле, где будем хранить средний рейтинг и количество голосов.
function wpone_add_rating_meta($post_id, $rating) {
$ratings = get_post_meta($post_id, '_wpone_ratings', true);
if (!$ratings) {
$ratings = ['count' => 0, 'sum' => 0];
}
$ratings['count']++;
$ratings['sum'] += intval($rating);
update_post_meta($post_id, '_wpone_ratings', $ratings);
}Функция для получения среднего рейтинга
function wpone_get_average_rating($post_id) {
$ratings = get_post_meta($post_id, '_wpone_ratings', true);
if (!$ratings || $ratings['count'] == 0) return 0;
return round($ratings['sum'] / $ratings['count'], 1);
}Вывод рейтинга на страницу поста
Добавим шорткод [wpone_rating], который выведет текущий средний рейтинг и форму для голосования.
function wpone_rating_shortcode($atts) {
global $post;
$avg = wpone_get_average_rating($post->ID);
ob_start();
?>
<div id="wpone-rating" data-postid="<?php echo $post->ID; ?>">
<p>Средний рейтинг: <strong><span id="wpone-average"><?php echo $avg; ?></span></strong> из 5</p>
<label>Оцените:</label>
<select id="wpone-user-rating">
<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>
<button id="wpone-submit-rating">Оценить</button>
</div>
<script>
document.getElementById('wpone-submit-rating').addEventListener('click', function() {
var rating = document.getElementById('wpone-user-rating').value;
var postId = document.getElementById('wpone-rating').getAttribute('data-postid');
fetch('<?php echo admin_url('admin-ajax.php'); ?>?action=wpone_save_rating&post_id=' + postId + '&rating=' + rating)
.then(response => response.json())
.then(data => {
if(data.success) {
document.getElementById('wpone-average').textContent = data.average;
alert('Спасибо за оценку!');
} else {
alert('Ошибка: ' + data.message);
}
});
});
</script>
<?php
return ob_get_clean();
}
add_shortcode('wpone_rating', 'wpone_rating_shortcode');Обработка AJAX-запроса для сохранения оценки
function wpone_ajax_save_rating() {
$post_id = intval($_GET['post_id']);
$rating = intval($_GET['rating']);
if ($post_id > 0 && $rating >= 1 && $rating <= 5) {
wpone_add_rating_meta($post_id, $rating);
$average = wpone_get_average_rating($post_id);
wp_send_json_success(['average' => $average]);
} else {
wp_send_json_error(['message' => 'Неверные параметры']);
}
}
add_action('wp_ajax_wpone_save_rating', 'wpone_ajax_save_rating');
add_action('wp_ajax_nopriv_wpone_save_rating', 'wpone_ajax_save_rating');Дополнительные советы по реализации системы оценок
Защита от повторных голосований
Чтобы избежать накруток, можно сохранять ID пользователя или IP-адрес в cookie и проверять перед добавлением новой оценки. Для более серьёзных проектов стоит использовать авторизацию и хранить оценки в отдельной таблице.
Кастомизация внешнего вида
Вывод рейтинга можно оформить через CSS и SVG-иконки. Также удобно использовать JavaScript-библиотеки для звёздного рейтинга, например, Starability или RateYo.
Интеграция с другими плагинами
Если вы используете плагины для SEO или отзывы, убедитесь, что ваша система оценок корректно отображается в сниппетах и не конфликтует с другими решениями.
Вывод
Добавление и вывод оценок пользователей — эффективный способ повысить интерактивность сайта на WordPress. Вы можете выбрать готовый плагин или создать собственное решение с помощью кода, используя примеры из этой статьи. Не забывайте про защиту от спама и удобный интерфейс для голосования.