Как добавить автоматический хендлер для обработки форм в WordPress

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

Почему нужен автоматический хендлер для форм в WordPress?

Стандартные решения, например Contact Form 7 или Gravity Forms, отлично работают, но иногда нужна более гибкая обработка данных, интеграция с ИИ или автоматическая генерация ответов без сложных настроек. Хендлер позволяет централизовать логику обработки, валидировать данные, отправлять уведомления и взаимодействовать с внешними сервисами, включая GPT-модели.

Такой подход полезен, если вы хотите создавать нестандартные формы, интегрировать их с REST API или автоматизировать ответы с помощью GPT, как это реализовано в WPGPT.

Создаем базовый автоматический хендлер для форм

Для начала создадим функцию, которая будет перехватывать отправку формы и обрабатывать данные. В WordPress для обработки форм обычно используется action-хук admin_post_nopriv_ и admin_post_ для гостей и авторизованных пользователей соответственно.

Добавим следующий код в functions.php вашей темы или в отдельный плагин:

add_action('admin_post_nopriv_wpgpt_handle_form', 'wpgpt_handle_form');
add_action('admin_post_wpgpt_handle_form', 'wpgpt_handle_form');

function wpgpt_handle_form() {
    if (!isset($_POST['wpgpt_form_nonce']) || !wp_verify_nonce($_POST['wpgpt_form_nonce'], 'wpgpt_form_action')) {
        wp_die('Ошибка безопасности. Попробуйте еще раз.');
    }

    $name = sanitize_text_field($_POST['name'] ?? '');
    $email = sanitize_email($_POST['email'] ?? '');
    $message = sanitize_textarea_field($_POST['message'] ?? '');

    if (empty($name) || empty($email) || empty($message)) {
        wp_die('Пожалуйста, заполните все обязательные поля.');
    }

    // Отправка уведомления на почту
    $to = get_option('admin_email');
    $subject = 'Новое сообщение с формы на сайте';
    $body = "Имя: $name\nEmail: $email\nСообщение: $message";
    $headers = ['Content-Type: text/plain; charset=UTF-8'];

    wp_mail($to, $subject, $body, $headers);

    // Перенаправление с сообщением об успехе
    wp_redirect(add_query_arg('wpgpt_form_status', 'success', wp_get_referer()));
    exit;
}

Эта функция проверяет nonce для безопасности, валидирует и очищает введенные данные, отправляет письмо администратору и перенаправляет пользователя обратно с параметром статуса.

Пример формы для отправки на созданный хендлер

Пример простой HTML-формы, которую можно вставить в любой шаблон или в текстовый блок:

<form action="<?php echo esc_url(admin_url('admin-post.php')); ?>" method="post">
    <input type="hidden" name="action" value="wpgpt_handle_form" />
    <?php wp_nonce_field('wpgpt_form_action', 'wpgpt_form_nonce'); ?>
    <label>Имя:<input type="text" name="name" required /></label><br>
    <label>Email:<input type="email" name="email" required /></label><br>
    <label>Сообщение:<textarea name="message" required></textarea></label><br>
    <button type="submit">Отправить</button>
</form>

Форма отправляет данные на admin-post.php с параметром action=wpgpt_handle_form, который задействует наш хендлер.

Расширяем хендлер: автоматические ответы с WPGPT

Чтобы повысить интерактивность, можно добавить автоматическую генерацию ответа пользователю с помощью ИИ на базе плагина WPGPT. Например, отправлять ответное письмо с благодарностью и кратким резюме сообщения.

Предположим, что плагин предоставляет функцию wpgpt_generate_reply($prompt) для генерации текста. Добавим вызов этой функции:

function wpgpt_handle_form() {
    if (!isset($_POST['wpgpt_form_nonce']) || !wp_verify_nonce($_POST['wpgpt_form_nonce'], 'wpgpt_form_action')) {
        wp_die('Ошибка безопасности. Попробуйте еще раз.');
    }

    $name = sanitize_text_field($_POST['name'] ?? '');
    $email = sanitize_email($_POST['email'] ?? '');
    $message = sanitize_textarea_field($_POST['message'] ?? '');

    if (empty($name) || empty($email) || empty($message)) {
        wp_die('Пожалуйста, заполните все обязательные поля.');
    }

    $to = get_option('admin_email');
    $subject = 'Новое сообщение с формы на сайте';
    $body = "Имя: $name\nEmail: $email\nСообщение: $message";
    $headers = ['Content-Type: text/plain; charset=UTF-8'];

    wp_mail($to, $subject, $body, $headers);

    // Генерация автоматического ответа с помощью WPGPT
    if (function_exists('wpgpt_generate_reply')) {
        $prompt = "Напиши краткий вежливый ответ на сообщение пользователя $name: $message";
        $auto_reply = wpgpt_generate_reply($prompt);

        wp_mail($email, 'Спасибо за ваше сообщение', $auto_reply, $headers);
    }

    wp_redirect(add_query_arg('wpgpt_form_status', 'success', wp_get_referer()));
    exit;
}

Такой подход позволяет сразу подтверждать пользователю, что его сообщение получено и будет обработано.

Валидация и безопасность

Обязательно используйте nonce-поля для защиты от CSRF-атак. Для валидации применяйте функции sanitize_text_field, sanitize_email и sanitize_textarea_field. Также рекомендуем лимитировать размер полей и проверять формат email. При отправке почты используйте wp_mail с правильными заголовками.

Для защиты от спама можно добавить скрытое поле (honeypot) или интегрировать капчу, например, Google reCAPTCHA. Также можно использовать плагины-антиспам или расширить логику хендлера для фильтрации подозрительных сообщений.

Пример расширенного хендлера с капчей и логированием

Добавим простую капчу и запишем сообщения в лог-файл:

function wpgpt_handle_form() {
    if (!isset($_POST['wpgpt_form_nonce']) || !wp_verify_nonce($_POST['wpgpt_form_nonce'], 'wpgpt_form_action')) {
        wp_die('Ошибка безопасности. Попробуйте еще раз.');
    }

    // Проверка капчи - простой пример
    if (empty($_POST['wpgpt_captcha']) || $_POST['wpgpt_captcha'] !== '5') {
        wp_die('Неверное значение капчи.');
    }

    $name = sanitize_text_field($_POST['name'] ?? '');
    $email = sanitize_email($_POST['email'] ?? '');
    $message = sanitize_textarea_field($_POST['message'] ?? '');

    if (empty($name) || empty($email) || empty($message)) {
        wp_die('Пожалуйста, заполните все обязательные поля.');
    }

    $to = get_option('admin_email');
    $subject = 'Новое сообщение с формы на сайте';
    $body = "Имя: $name\nEmail: $email\nСообщение: $message";
    $headers = ['Content-Type: text/plain; charset=UTF-8'];

    wp_mail($to, $subject, $body, $headers);

    // Логирование
    error_log("[WPGPT Form] $name <$email>: $message");

    // Автоответ с WPGPT
    if (function_exists('wpgpt_generate_reply')) {
        $prompt = "Напиши краткий вежливый ответ на сообщение пользователя $name: $message";
        $auto_reply = wpgpt_generate_reply($prompt);
        wp_mail($email, 'Спасибо за ваше сообщение', $auto_reply, $headers);
    }

    wp_redirect(add_query_arg('wpgpt_form_status', 'success', wp_get_referer()));
    exit;
}

В форму дополнительно добавьте поле капчи:

<label>Сколько будет 2 + 3?<input type="text" name="wpgpt_captcha" required /></label><br>

Выводы и рекомендации

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

Главное — не забывать о безопасности, валидации данных и корректной обработке ошибок. Используйте nonce, санитайзинг, капчу и логирование для надежной работы хендлера.

Если хотите быстро внедрить готовое решение с GPT, посмотрите плагин WPGPT — он позволяет создавать чат-ботов, автоматические ответы и многое другое без сложного программирования.

Как создать автоматический подбор тегов в WordPress с помощью GPT
15.01.2026
Автоматический перевод отзывов в WordPress с помощью WPGPT
11.02.2026
Как добавить автоматическое отключение неиспользуемых плагинов в WordPress
04.04.2026
Как создать автоматический фильтр по тегам в WordPress с поддержкой GPT
16.02.2026
Как создать автоматический генератор изображений для постов WordPress с помощью GPT
17.04.2026