Как создать автоматический отзыв с подтверждением в WordPress

Автоматизация сбора отзывов — важная задача для многих сайтов на WordPress, особенно если вам нужно получить качественные и проверенные отзывы от пользователей. В этой статье мы разберем, как создать систему автоматических отзывов с подтверждением, чтобы минимизировать ручную работу и повысить доверие к публикуемым отзывам.

Почему важна система подтверждения отзывов

Многие сталкиваются с проблемой, когда отзывы оставляют боты или недобросовестные пользователи. Без проверки сложно поддерживать качество и релевантность комментариев. Система подтверждения позволяет:

  • Фильтровать спам и некачественные отзывы.
  • Повышать доверие посетителей через прозрачность процесса.
  • Автоматизировать публикацию только проверенных отзывов.

Для реализации такой системы можно использовать как готовые плагины, так и писать собственные решения с использованием WordPress API.

Использование плагина Expert Review для автоматизации отзывов

Плагин Expert Review отлично подходит для создания отзывов с возможностью модерации и подтверждения. Он позволяет настроить:

  • Форму сбора отзывов с необходимыми полями.
  • Автоматическую отправку писем с подтверждением на email пользователя.
  • Отслеживание статуса отзыва (ожидает подтверждения, одобрен, отклонен).

После установки и активации плагина настройте форму и включите опцию подтверждения по email. Это позволит пользователям подтвердить отзыв, перейдя по ссылке в письме, что исключит публикацию спама.

Создание собственного решения для подтверждения отзывов на WordPress

Шаг 1. Создаем пользовательский тип записи для отзывов

Для начала зарегистрируем кастомный тип записи wptour_review, чтобы хранить отзывы отдельно от стандартных комментариев:

function wptour_register_review_cpt() {
    $args = [
        'public' => true,
        'label'  => 'Отзывы',
        'supports' => ['title', 'editor', 'author'],
        'capability_type' => 'post',
        'show_in_rest' => true
    ];
    register_post_type('wptour_review', $args);
}
add_action('init', 'wptour_register_review_cpt');

Шаг 2. Добавляем форму для сбора отзывов с подтверждением

Создадим простую форму на фронтенде, которая будет отправлять отзыв на обработку:

<form method="post" action="">
    <input type="text" name="wptour_name" placeholder="Ваше имя" required>
    <input type="email" name="wptour_email" placeholder="Ваш Email" required>
    <textarea name="wptour_message" placeholder="Ваш отзыв" required></textarea>
    <input type="submit" name="wptour_submit" value="Отправить отзыв">
</form>

Обрабатываем отправку формы, создавая отзыв со статусом pending и отправляя email с подтверждением:

function wptour_handle_review_submission() {
    if (!empty($_POST['wptour_submit'])) {
        $name = sanitize_text_field($_POST['wptour_name']);
        $email = sanitize_email($_POST['wptour_email']);
        $message = sanitize_textarea_field($_POST['wptour_message']);
        
        // Создаем отзыв с статусом ожидания подтверждения
        $post_id = wp_insert_post([
            'post_type' => 'wptour_review',
            'post_title' => 'Отзыв от ' . $name,
            'post_content' => $message,
            'post_status' => 'pending',
            'post_author' => 0
        ]);
        if ($post_id) {
            // Генерируем уникальный ключ подтверждения
            $key = wp_generate_password(20, false);
            update_post_meta($post_id, '_wptour_confirmation_key', $key);
            update_post_meta($post_id, '_wptour_user_email', $email);
            
            // Отправляем email с ссылкой подтверждения
            $confirm_link = add_query_arg([
                'wptour_confirm_review' => $post_id,
                'key' => $key
            ], home_url());
            $subject = 'Подтвердите ваш отзыв';
            $body = "Здравствуйте, $name!\nПожалуйста, подтвердите ваш отзыв, перейдя по ссылке:\n$confirm_link";
            wp_mail($email, $subject, $body);
            echo '<p>Спасибо! Проверьте email для подтверждения отзыва.</p>';
        }
    }
}
add_action('wp_head', 'wptour_handle_review_submission');

Шаг 3. Обработка подтверждения отзыва

Добавим проверку параметров в URL, чтобы активировать отзыв после перехода пользователя по ссылке:

function wptour_confirm_review() {
    if (!empty($_GET['wptour_confirm_review']) && !empty($_GET['key'])) {
        $post_id = intval($_GET['wptour_confirm_review']);
        $key = sanitize_text_field($_GET['key']);
        $saved_key = get_post_meta($post_id, '_wptour_confirmation_key', true);
        if ($key === $saved_key) {
            wp_update_post([
                'ID' => $post_id,
                'post_status' => 'publish'
            ]);
            delete_post_meta($post_id, '_wptour_confirmation_key');
            echo '<p>Ваш отзыв подтвержден и опубликован.</p>';
        } else {
            echo '<p>Неверный ключ подтверждения.</p>';
        }
    }
}
add_action('wp_head', 'wptour_confirm_review');

Дополнительные советы по улучшению системы отзывов

Использование AJAX для отправки и подтверждения отзывов

Для улучшения UX можно отправлять форму отзывов через AJAX, чтобы не перезагружать страницу, а также динамически показывать статус отправки и подтверждения. Это повысит вовлеченность пользователей.

Интеграция с плагином Clearfy Pro для безопасности

Плагин Clearfy Pro поможет дополнительно защитить форму отзывов от спама и ботов, а также оптимизировать работу сайта.

Вывод отзывов на сайте с пагинацией

Для отображения отзывов используйте WP_Query с параметром post_type = 'wptour_review' и post_status = 'publish'. Для удобства пользователей подключите пагинацию, например, с помощью плагина ABC Pagination.

Пример вывода отзывов:

$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$query = new WP_Query([
    'post_type' => 'wptour_review',
    'post_status' => 'publish',
    'paged' => $paged,
    'posts_per_page' => 5
]);
if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        echo '<h3>' . get_the_title() . '</h3>';
        echo '<div>' . get_the_content() . '</div>';
    }
    // Вызов пагинации
    if (function_exists('abc_pagination')) {
        abc_pagination($query->max_num_pages);
    }
}
wp_reset_postdata();
Как использовать хуки в WordPress: практические примеры и советы
09.11.2025
WooCommerce: как избежать конфликтов и ошибок при массовом импорте продуктов
03.05.2026
Как создать автоматический отзыв с подтверждением в WordPress
17.04.2026
Как автоматически удалять временные файлы в WordPress
09.12.2025
Как правильно создать и использовать переименованные таксономии в WordPress
22.03.2026

Уроки со скриншотами, подробные руководства