Автоматический сбор отзывов на сайте — отличный способ увеличить количество обратной связи от пользователей и повысить доверие к вашему контенту или продуктам. В этой статье мы подробно разберём, как реализовать такую систему в WordPress с подтверждением отзывов, чтобы минимизировать спам и повысить качество отзывов.
Почему важен автоматический сбор отзывов с подтверждением
Отзывы играют ключевую роль в повышении конверсии и доверия посетителей. Однако часто владельцы сайтов сталкиваются с проблемами:
- Большое количество спама и фейковых отзывов.
- Пользователи не оставляют отзывы из-за сложности процесса.
- Отсутствие модерации и подтверждения приводит к публикации некачественного контента.
Автоматизация сбора отзывов с подтверждением позволяет решить эти задачи, сделав процесс удобным и безопасным.
Выбор плагина для автоматического сбора отзывов
Для реализации системы можно использовать готовые решения, которые значительно облегчат задачу. Среди популярных плагинов стоит выделить:
- Expert Review — мощный плагин для сбора и управления отзывами с поддержкой подтверждений и модерации.
- WPRemark — удобный инструмент для сбора отзывов с возможностью автоматической проверки и уведомлений.
Оба плагина имеют встроенные механизмы подтверждения через email, что позволяет защититься от спама.
Создание простой системы сбора отзывов с подтверждением на PHP и WordPress
Если по каким-то причинам вы хотите сделать кастомное решение, ниже пример минимальной реализации с подтверждением по email.
1. Создание формы для отзывов
Добавим шорткод, который выводит форму:
function wpall_render_review_form() {
if ( isset($_POST['wpall_review_submit']) ) {
wpall_handle_review_submission();
}
ob_start();
?>
<form method="post">
<p><label for="wpall_review_name">Ваше имя:</label><br>
<input type="text" id="wpall_review_name" name="wpall_review_name" required></p>
<p><label for="wpall_review_email">Email для подтверждения:</label><br>
<input type="email" id="wpall_review_email" name="wpall_review_email" required></p>
<p><label for="wpall_review_text">Отзыв:</label><br>
<textarea id="wpall_review_text" name="wpall_review_text" required></textarea></p>
<p><input type="submit" name="wpall_review_submit" value="Отправить отзыв"></p>
</form>
<?php
return ob_get_clean();
}
add_shortcode('wpall_review_form', 'wpall_render_review_form');2. Обработка и сохранение отзыва с отправкой письма подтверждения
Создадим функцию, которая принимает данные, сохраняет их в базу в статусе «ожидает подтверждения» и отправляет письмо с ссылкой подтверждения:
function wpall_handle_review_submission() {
global $wpdb;
$table = $wpdb->prefix . 'wpall_reviews';
$name = sanitize_text_field($_POST['wpall_review_name']);
$email = sanitize_email($_POST['wpall_review_email']);
$text = sanitize_textarea_field($_POST['wpall_review_text']);
$token = wp_generate_password(20, false);
// Создаем таблицу, если не существует
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS $table (
id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
review TEXT NOT NULL,
token VARCHAR(255) NOT NULL,
status VARCHAR(20) NOT NULL DEFAULT 'pending',
PRIMARY KEY (id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
$wpdb->insert($table, [
'name' => $name,
'email' => $email,
'review' => $text,
'token' => $token,
'status' => 'pending'
]);
$confirm_url = add_query_arg([
'wpall_review_confirm' => '1',
'token' => $token
], home_url());
$subject = 'Подтвердите ваш отзыв на сайте';
$message = "Здравствуйте, $name!\n\nПожалуйста, подтвердите ваш отзыв, перейдя по ссылке:\n$confirm_url";
wp_mail($email, $subject, $message);
echo '<p>Спасибо за отзыв! Проверьте ваш email для подтверждения.</p>';
}3. Подтверждение отзыва по ссылке
Добавим обработчик для подтверждения и публикации отзыва:
function wpall_handle_review_confirmation() {
if ( isset($_GET['wpall_review_confirm'], $_GET['token']) ) {
global $wpdb;
$table = $wpdb->prefix . 'wpall_reviews';
$token = sanitize_text_field($_GET['token']);
$review = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table WHERE token = %s AND status = 'pending'", $token));
if ($review) {
$wpdb->update($table, ['status' => 'approved'], ['id' => $review->id]);
echo '<p>Ваш отзыв подтверждён и опубликован. Спасибо!</p>';
} else {
echo '<p>Неверный или устаревший токен подтверждения.</p>';
}
exit;
}
}
add_action('template_redirect', 'wpall_handle_review_confirmation');Вывод подтверждённых отзывов на сайте
Теперь можно вывести все одобренные отзывы с помощью шорткода:
function wpall_show_approved_reviews() {
global $wpdb;
$table = $wpdb->prefix . 'wpall_reviews';
$reviews = $wpdb->get_results("SELECT name, review FROM $table WHERE status = 'approved' ORDER BY id DESC");
if (empty($reviews)) {
return '<p>Отзывы отсутствуют.</p>';
}
$output = '<ul class="wpall-reviews">';
foreach($reviews as $r) {
$output .= '<li><strong>' . esc_html($r->name) . '</strong>: ' . esc_html($r->review) . '</li>';
}
$output .= '</ul>';
return $output;
}
add_shortcode('wpall_show_reviews', 'wpall_show_approved_reviews');Советы по улучшению и безопасности
Защита от спама
Для повышения безопасности и снижения количества спама рекомендуем добавить капчу (например, Google reCAPTCHA) в форму. Это значительно уменьшит автоматические отправки.
Модерация и уведомления
Если хотите, чтобы отзывы появлялись только после ручной проверки, вместо автоматического одобрения в функции подтверждения можно менять статус на "moderation" и уведомлять администратора.
Использование плагинов для расширения функционала
Плагины Expert Review и WPRemark изначально имеют все необходимые функции, включая email-подтверждение, модерацию, рейтинги и интеграцию с дизайном сайта. Их стоит рассмотреть для профессиональных проектов.
Итог
Автоматический сбор отзывов с подтверждением — это важный элемент современного сайта на WordPress, который помогает улучшить взаимодействие с пользователями и повысить качество контента. Вы можете использовать готовые решения или создать своё, опираясь на примеры кода из статьи.