На многих сайтах, особенно интернет-магазинах и сервисах, отзывы играют ключевую роль в повышении доверия и конверсии. В этой статье мы разберём, как создать систему отзывов на WordPress с функцией автотрансляции — автоматического обновления и отображения новых отзывов без перезагрузки страницы. Такое решение улучшает пользовательский опыт и делает сайт современным и интерактивным.
Почему нужна автотрансляция отзывов на WordPress
Обычно отзывы добавляются и отображаются статично: пользователь отправляет отзыв, администратор его подтверждает, и только после обновления страницы отзыв становится видимым. Автотрансляция позволяет автоматически показывать новые отзывы всем посетителям в реальном времени или с минимальной задержкой.
Преимущества автотрансляции:
- Повышение вовлечённости пользователей — отзывы появляются мгновенно.
- Снижение нагрузки на сервер благодаря AJAX-запросам без полной перезагрузки.
- Современный UX, который увеличивает доверие к сайту.
Теперь перейдём к технической части.
Выбор плагина для отзывов с автотрансляцией
Для начала рассмотрим пару плагинов, которые поддерживают AJAX и могут работать с динамическим обновлением контента:
- Site Reviews — мощный плагин для отзывов с возможностью кастомизации и поддержки AJAX.
- WPRemark — плагин для оценки и отзывов с расширенными функциями модерирования и AJAX-подгрузкой.
Оба плагина легко интегрируются с темами и поддерживают шорткоды для вывода отзывов. Но если нужна более глубокая кастомизация, можно создать свой AJAX-механизм.
Создание кастомной системы отзывов с автотрансляцией: структура и база данных
Для реализации кастомной системы создадим пользовательский тип записей review и используем AJAX для динамического вывода и отправки отзывов. Вот базовый пример регистрации типа записи:
function wpcore_register_review_post_type() {
$args = array(
'labels' => array(
'name' => 'Отзывы',
'singular_name' => 'Отзыв',
),
'public' => true,
'has_archive' => false,
'supports' => array('title', 'editor', 'author', 'comments'),
'show_in_rest' => true,
);
register_post_type('review', $args);
}
add_action('init', 'wpcore_register_review_post_type');
Отзывы будут храниться как записи с типом review. Для отображения и отправки отзывов создадим AJAX-обработчики.
Реализация AJAX отправки отзыва
Добавим форму для отправки отзыва на фронтенде:
<form id="wpcore-review-form">
<input type="text" name="review_title" placeholder="Заголовок отзыва" required>
<textarea name="review_content" placeholder="Текст отзыва" required></textarea>
<input type="submit" value="Отправить отзыв">
</form>
<div id="wpcore-review-message"></div>
JavaScript для отправки формы через AJAX:
jQuery(document).ready(function($) {
$('#wpcore-review-form').on('submit', function(e) {
e.preventDefault();
var data = {
action: 'wpcore_submit_review',
title: $(this).find('input[name=review_title]').val(),
content: $(this).find('textarea[name=review_content]').val(),
security: wpcore_ajax_params.nonce
};
$.post(wpcore_ajax_params.ajax_url, data, function(response) {
if(response.success) {
$('#wpcore-review-message').text('Спасибо за отзыв! Он скоро появится на сайте.');
$('#wpcore-review-form')[0].reset();
} else {
$('#wpcore-review-message').text('Ошибка: ' + response.data);
}
});
});
});
PHP-обработчик для сохранения отзыва:
function wpcore_ajax_submit_review() {
check_ajax_referer('wpcore_nonce', 'security');
$title = sanitize_text_field($_POST['title']);
$content = sanitize_textarea_field($_POST['content']);
if(empty($title) || empty($content)) {
wp_send_json_error('Пожалуйста, заполните все поля');
}
$new_review = array(
'post_title' => $title,
'post_content' => $content,
'post_status' => 'pending', // Можно менять на 'publish' при автоматической модерации
'post_type' => 'review',
'post_author' => get_current_user_id() ?: 1,
);
$post_id = wp_insert_post($new_review);
if($post_id) {
wp_send_json_success();
} else {
wp_send_json_error('Ошибка при сохранении отзыва');
}
}
add_action('wp_ajax_wpcore_submit_review', 'wpcore_ajax_submit_review');
add_action('wp_ajax_nopriv_wpcore_submit_review', 'wpcore_ajax_submit_review');
Не забудьте локализовать скрипт и передать параметры AJAX:
function wpcore_enqueue_scripts() {
wp_enqueue_script('wpcore-ajax', get_template_directory_uri() . '/js/wpcore-ajax.js', array('jquery'), null, true);
wp_localize_script('wpcore-ajax', 'wpcore_ajax_params', array(
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('wpcore_nonce')
));
}
add_action('wp_enqueue_scripts', 'wpcore_enqueue_scripts');
Автоматическое обновление списка отзывов с помощью AJAX
Чтобы отзывы отображались без перезагрузки, реализуем периодический AJAX-запрос для подгрузки новых отзывов.
HTML блок для отзывов:
<div id="wpcore-reviews-list">
<!-- Здесь будут отзывы -->
</div>
JavaScript для подгрузки отзывов каждые 30 секунд:
function wpcore_load_reviews() {
jQuery.post(wpcore_ajax_params.ajax_url, {action: 'wpcore_get_reviews'}, function(response) {
if(response.success) {
jQuery('#wpcore-reviews-list').html(response.data);
}
});
}
jQuery(document).ready(function($) {
wpcore_load_reviews();
setInterval(wpcore_load_reviews, 30000); // обновление каждые 30 секунд
});
PHP-функция для вывода отзывов:
function wpcore_ajax_get_reviews() {
$args = array(
'post_type' => 'review',
'post_status' => 'publish',
'orderby' => 'date',
'order' => 'DESC',
'posts_per_page' => 10,
);
$reviews = get_posts($args);
if(empty($reviews)) {
wp_send_json_success('<p>Отзывов пока нет.</p>');
}
ob_start();
foreach($reviews as $review) {
echo '<div class="wpcore-review-item">';
echo '<h3>' . esc_html($review->post_title) . '</h3>';
echo '<p>' . esc_html($review->post_content) . '</p>';
echo '<small>Опубликовано: ' . get_the_date('d.m.Y', $review) . '</small>';
echo '</div>';
}
$output = ob_get_clean();
wp_send_json_success($output);
}
add_action('wp_ajax_wpcore_get_reviews', 'wpcore_ajax_get_reviews');
add_action('wp_ajax_nopriv_wpcore_get_reviews', 'wpcore_ajax_get_reviews');
Дополнительные советы по безопасности и оптимизации
Чтобы не допустить спам и повысить безопасность:
- Используйте
check_ajax_refererдля защиты от CSRF. - Добавьте капчу (например, Google reCAPTCHA) в форму отзывов.
- Реализуйте модерацию отзывов перед публикацией (статус
pending). - Кэшируйте вывод отзывов, чтобы снизить нагрузку.
- Используйте пагинацию или подгрузку по кнопке «Загрузить еще» для большого объёма отзывов.
Интеграция с плагином Clearfy Pro для повышения безопасности
Плагин Clearfy Pro поможет дополнительно защитить сайт и оптимизировать работу AJAX, отключая ненужные скрипты и закрывая уязвимости.
Использование WPRemark для оценки отзывов
Если нужна оценка к отзывам, можно комбинировать кастомные отзывы с плагином WPRemark, который умеет автоматически собирать оценки и выводить рейтинг.
Заключение
Создание отзывов с автотрансляцией на WordPress - задача вполне выполнимая и полезная для современных сайтов. В статье показан пример создания пользовательского типа записей, AJAX формы отправки и динамической подгрузки отзывов. Такой подход улучшает UX, повышает доверие и вовлечённость пользователей. Для расширения функционала можно использовать готовые плагины из WPShop, а также применять меры безопасности и оптимизации.