В современном WordPress-сайте отзывы пользователей играют важную роль для повышения доверия и конверсии. Однако ручная модерация и подтверждение отзывов часто занимают много времени. В этой статье мы подробно разберем, как создать автоматическую систему отзывов с обязательным подтверждением и модерацией, чтобы снизить нагрузку на администраторов и обеспечить качественный контент.
Почему важна автоматизация системы отзывов в WordPress
Отзывы формируют репутацию сайта и помогают новым посетителям принимать решения. Без автоматизации:
- Вы рискуете получить спам и фальшивые отзывы;
- Модерация занимает слишком много времени;
- Пользователи могут не подтвердить свои отзывы;
- Отсутствие уведомлений снижает скорость обработки отзывов.
Автоматизация позволяет решить эти проблемы, повысить качество отзывов и ускорить их публикацию.
Обзор популярных плагинов для автоматизации отзывов
Для создания системы с подтверждением и модерацией рекомендуем обратить внимание на плагины:
- WP Review Pro – мощный плагин с возможностью модерации и email-подтверждения;
- Expert Review от WPSHOP – удобный для создания отзывов с гибкой модерацией;
- WPForms – с помощью форм и дополнений можно реализовать подтверждение отзывов по email;
- Akismet – помогает фильтровать спам-отзывы.
Однако для полной автоматизации и интеграции с кастомной логикой часто требуется собственный код.
Создаем собственную автоматическую систему отзывов с подтверждением
Рассмотрим пример, как реализовать простую систему с подтверждением email и модерацией через пользовательские метаполя.
1. Создаем кастомный тип записи 'review'
function wpcommunity_register_review_cpt() {
$args = [
'public' => true,
'label' => 'Отзывы',
'supports' => ['title', 'editor', 'author'],
'capability_type' => 'post',
'show_in_rest' => true,
];
register_post_type('review', $args);
}
add_action('init', 'wpcommunity_register_review_cpt');
Это позволит отделить отзывы от обычных записей.
2. Создаем форму для отправки отзыва с полем email
Добавим шорткод [wpcommunity_review_form], который выведет форму:
function wpcommunity_review_form_shortcode() {
if ($_POST['wpcommunity_review_nonce'] && wp_verify_nonce($_POST['wpcommunity_review_nonce'], 'wpcommunity_save_review')) {
$email = sanitize_email($_POST['email']);
$content = sanitize_textarea_field($_POST['content']);
$post_id = wp_insert_post([
'post_type' => 'review',
'post_title' => 'Отзыв от ' . $email,
'post_content' => $content,
'post_status' => 'pending',
]);
if ($post_id) {
update_post_meta($post_id, '_wpcommunity_review_email', $email);
// Отправляем письмо с подтверждением
$token = wp_generate_password(20, false);
update_post_meta($post_id, '_wpcommunity_review_token', $token);
$link = add_query_arg([
'wpcommunity_confirm_review' => $post_id,
'token' => $token
], home_url('/'));
wp_mail($email, 'Подтверждение отзыва', "Перейдите по ссылке для подтверждения: $link");
return '<p>Спасибо! Проверьте email для подтверждения отзыва.</p>';
}
}
ob_start();
?>
<form method="post">
<label>Email: <input type="email" name="email" required></label><br>
<label>Отзыв: <textarea name="content" required></textarea></label><br>
<input type="hidden" name="wpcommunity_review_nonce" value="<?php echo wp_create_nonce('wpcommunity_save_review'); ?>">
<button type="submit">Отправить</button>
</form>
<?php
return ob_get_clean();
}
add_shortcode('wpcommunity_review_form', 'wpcommunity_review_form_shortcode');
3. Обрабатываем подтверждение отзыва по ссылке
function wpcommunity_confirm_review() {
if (isset($_GET['wpcommunity_confirm_review'], $_GET['token'])) {
$post_id = intval($_GET['wpcommunity_confirm_review']);
$token = sanitize_text_field($_GET['token']);
$saved_token = get_post_meta($post_id, '_wpcommunity_review_token', true);
if ($token === $saved_token) {
wp_update_post(['ID' => $post_id, 'post_status' => 'publish']);
delete_post_meta($post_id, '_wpcommunity_review_token');
wp_redirect(home_url('/thank-you-for-review/'));
exit;
} else {
wp_die('Неверный токен подтверждения.');
}
}
}
add_action('template_redirect', 'wpcommunity_confirm_review');
Таким образом, отзыв будет опубликован только после подтверждения пользователем по email.
Модерация и автоматическое уведомление администраторов
Чтобы администраторы получали уведомления о новых отзывах, и могли быстро отследить неподтвержденные, добавим следующий код:
function wpcommunity_notify_admin_new_review($post_id, $post, $update) {
if ($post->post_type === 'review' && $post->post_status === 'pending' && !$update) {
$admin_email = get_option('admin_email');
$reviewer_email = get_post_meta($post_id, '_wpcommunity_review_email', true);
$subject = 'Новый отзыв ожидает модерации';
$message = "Поступил новый отзыв от: $reviewer_email\nПерейдите в админку для проверки.";
wp_mail($admin_email, $subject, $message);
}
}
add_action('wp_insert_post', 'wpcommunity_notify_admin_new_review', 10, 3);
Это упростит оперативную модерацию отзывов.
Дополнительные советы по безопасности и удобству
- Используйте
wp_nonceдля защиты форм от CSRF; - Добавьте капчу (например, Google reCAPTCHA) для защиты от спама;
- Храните email и токен в метаполях с префиксом, чтобы избежать конфликтов;
- Реализуйте пагинацию и фильтрацию отзывов в админке;
- Для улучшения UX можно использовать AJAX для отправки формы без перезагрузки.
Заключение
Создание автоматической системы отзывов с подтверждением и модерацией в WordPress – это реальная и полезная задача, которую можно решить собственными силами, используя кастомные типы записей, метаполя, wp_mail и хуки. Для более продвинутых решений рекомендуем обратить внимание на плагин Expert Review от WPSHOP, который уже включает многие необходимые функции для отзывов.
Используйте предложенные подходы и кодовые примеры для создания надежной и удобной системы отзывов, которая повысит доверие к вашему сайту и упростит работу с обратной связью.