Обработка форм — одна из самых частых задач при разработке сайтов на 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 — он позволяет создавать чат-ботов, автоматические ответы и многое другое без сложного программирования.