В этой статье разберём, как создать автоматическую систему отзывов в WordPress с функцией подтверждения, которая позволит собирать отзывы только от реальных пользователей, минимизируя спам и повышая доверие к вашему сайту. Это особенно актуально для сайтов с отзывами о товарах, услугах или мероприятиях, где важна достоверность и качество контента.
Почему нужна система подтверждения отзывов
Обычные формы отзывов часто приводят к появлению спам-сообщений и фейковых отзывов, которые портят репутацию сайта и снижают конверсию. Подтверждение отзывов позволяет:
- Убедиться, что отзыв оставлен реальным пользователем;
- Отсечь спам и ботов;
- Модерировать отзывы перед публикацией;
- Автоматизировать процесс сбора и публикации отзывов.
Для реализации такой системы можно использовать плагины и кастомный код с применением WordPress REST API и AJAX, чтобы сделать процесс удобным и быстрым.
Выбор плагина для отзывов с подтверждением
На рынке есть несколько полезных плагинов, которые можно использовать как основу:
- Expert Review — мощный плагин для управления отзывами с расширенными возможностями модерации и подтверждения;
- WPForms — с помощью дополнений можно создать форму отзывов с подтверждением по e-mail;
- WP Customer Reviews — простой плагин с модерацией и антиспам фильтрами.
Если вы хотите полностью контролировать процесс и интегрировать систему в уникальный дизайн, стоит рассмотреть разработку собственного решения.
Создание формы отзывов с подтверждением по e-mail на примере кода
Рассмотрим пример, как создать форму отзывов, которая отправляет подтверждение на e-mail пользователя перед публикацией отзыва.
Шаг 1. Создаём форму в шаблоне
<form id="wpcommunity_review_form" method="post">
<label for="review_name">Ваше имя:</label>
<input type="text" id="review_name" name="review_name" required />
<label for="review_email">Ваш e-mail:</label>
<input type="email" id="review_email" name="review_email" required />
<label for="review_text">Отзыв:</label>
<textarea id="review_text" name="review_text" required></textarea>
<input type="hidden" name="review_nonce" value="<?php echo wp_create_nonce('wpcommunity_review_nonce'); ?>" />
<button type="submit">Отправить отзыв</button>
</form>
<div id="wpcommunity_review_message"></div>
Шаг 2. Обработка данных и отправка письма с подтверждением
Добавим обработчик AJAX, который будет принимать данные, создавать временный отзыв и отправлять пользователю ссылку для подтверждения:
add_action('wp_ajax_wpcommunity_submit_review', 'wpcommunity_submit_review');
add_action('wp_ajax_nopriv_wpcommunity_submit_review', 'wpcommunity_submit_review');
function wpcommunity_submit_review() {
check_ajax_referer('wpcommunity_review_nonce', 'security');
$name = sanitize_text_field($_POST['review_name']);
$email = sanitize_email($_POST['review_email']);
$text = sanitize_textarea_field($_POST['review_text']);
if (empty($name) || empty($email) || empty($text)) {
wp_send_json_error('Все поля обязательны для заполнения.');
}
// Создаём отзыв как временный пост с типом 'pending'
$review_id = wp_insert_post([
'post_type' => 'review',
'post_title' => 'Отзыв от ' . $name,
'post_content' => $text,
'post_status' => 'pending',
'meta_input' => [
'review_author_email' => $email
]
]);
if (!$review_id) {
wp_send_json_error('Ошибка при сохранении отзыва.');
}
// Генерируем уникальный ключ подтверждения
$key = wp_generate_password(20, false);
update_post_meta($review_id, 'confirmation_key', $key);
// Отправляем письмо с подтверждением
$confirm_link = add_query_arg([
'review_id' => $review_id,
'key' => $key
], site_url('/confirm-review/'));
$subject = 'Подтвердите ваш отзыв на сайте ' . get_bloginfo('name');
$message = "Здравствуйте, $name!\n\nПожалуйста, подтвердите ваш отзыв, перейдя по ссылке: $confirm_link";
wp_mail($email, $subject, $message);
wp_send_json_success('Письмо с подтверждением отправлено на ваш e-mail.');
}
Шаг 3. Создание страницы подтверждения и логика активации отзыва
Создайте страницу с ярлыком confirm-review и добавьте следующий код в functions.php или плагин:
add_action('template_redirect', function() {
if (is_page('confirm-review')) {
$review_id = intval($_GET['review_id'] ?? 0);
$key = $_GET['key'] ?? '';
if (!$review_id || !$key) {
wp_die('Неверная ссылка подтверждения.');
}
$saved_key = get_post_meta($review_id, 'confirmation_key', true);
if ($key === $saved_key) {
// Публикуем отзыв
wp_update_post([
'ID' => $review_id,
'post_status' => 'publish'
]);
// Удаляем ключ подтверждения
delete_post_meta($review_id, 'confirmation_key');
echo '<h2>Спасибо! Ваш отзыв подтверждён и опубликован.</h2>';
} else {
wp_die('Неверный ключ подтверждения.');
}
exit;
}
});
Реализация AJAX для отправки формы без перезагрузки страницы
Для удобства пользователей сделаем отправку формы отзывов через AJAX. Добавьте этот скрипт в шаблон или enqueue с локализацией:
jQuery(document).ready(function($) {
$('#wpcommunity_review_form').on('submit', function(e) {
e.preventDefault();
var data = {
action: 'wpcommunity_submit_review',
security: $('input[name="review_nonce"]').val(),
review_name: $('#review_name').val(),
review_email: $('#review_email').val(),
review_text: $('#review_text').val()
};
$.post(ajaxurl, data, function(response) {
if (response.success) {
$('#wpcommunity_review_message').html('<p style="color:green">' + response.data + '</p>');
$('#wpcommunity_review_form')[0].reset();
} else {
$('#wpcommunity_review_message').html('<p style="color:red">' + response.data + '</p>');
}
});
});
});
Дополнительные советы по улучшению системы отзывов
Чтобы повысить качество и безопасность системы, рекомендуем:
- Использовать reCAPTCHA или альтернативные антиспам решения, например, Clearfy Pro для защиты форм;
- Добавить возможность администраторам просматривать и редактировать отзывы перед публикацией;
- Показывать отзывы с помощью кастомного шаблона и пагинации, например, с помощью ABC Pagination;
- Автоматизировать напоминания пользователям, если они не подтвердили отзыв в течение определённого времени;
- Использовать пользовательские типы записей (post type) и метаданные для удобного управления отзывами.
Вывод
Автоматическая система отзывов с подтверждением — это не только способ повысить качество контента на сайте, но и инструмент для улучшения взаимодействия с пользователями. Используя стандартные инструменты WordPress, AJAX и REST API, а также проверенные плагины, вы сможете создать надёжную и удобную систему, которая будет работать на ваш бизнес и репутацию.