Contact Form 7 — один из самых популярных плагинов для создания форм в WordPress. Однако базовый функционал далеко не всегда покрывает все задачи по обработке заявок. В этой статье рассмотрим, как с помощью PHP и стандартных хуков WordPress можно автоматизировать обработку форм, создавать кастомные сценарии, выполнять дополнительные действия после отправки, и интегрировать формы с внешними системами.
Почему нужна автоматизация обработки форм Contact Form 7
Стандартно Contact Form 7 отправляет письмо на указанный адрес и выводит сообщение об успешной отправке. Но часто этого недостаточно. Например, может понадобиться:
- Сохранять заявки в отдельную таблицу базы данных для последующего анализа.
- Автоматически создавать задачи в CRM или отправлять данные в сторонние сервисы через API.
- Отправлять дополнительные уведомления или запускать кастомные процессы после получения формы.
- Выполнять валидацию и обработку данных на стороне сервера.
Все это требует подключения к стандартному процессу отправки формы и расширения его логики.
Используем хуки Contact Form 7 для расширения функционала
Contact Form 7 предоставляет несколько очень полезных хуков, которые позволяют внедрять собственный PHP-код в процесс обработки формы. Основные из них:
wpcf7_before_send_mail— срабатывает перед отправкой письма.wpcf7_mail_sent— срабатывает после успешной отправки письма.wpcf7_submit— вызывается при любом завершении отправки формы, можно проверить статус.wpcf7_validate— позволяет добавить собственную валидацию полей.
Рассмотрим пример использования хука wpcf7_mail_sent для сохранения заявки в базу данных.
Пример: Сохранение данных формы в таблицу WordPress
add_action('wpcf7_mail_sent', 'contactform7ru_save_form_submission');
function contactform7ru_save_form_submission($contact_form) {
$submission = WPCF7_Submission::get_instance();
if (!$submission) {
return;
}
$data = $submission->get_posted_data();
global $wpdb;
$table_name = $wpdb->prefix . 'cf7_submissions';
// Создайте таблицу вручную или через функцию активации плагина
$wpdb->insert(
$table_name,
[
'form_id' => $contact_form->id(),
'submitted_at' => current_time('mysql'),
'name' => sanitize_text_field($data['your-name'] ?? ''),
'email' => sanitize_email($data['your-email'] ?? ''),
'message' => sanitize_textarea_field($data['your-message'] ?? '')
]
);
}
Этот код автоматически сохраняет имя, email и сообщение из формы в отдельную таблицу wp_cf7_submissions. Чтобы этот код работал, таблицу нужно создать предварительно, например, через функцию активации вашего плагина или темы.
Автоматическая отправка данных в внешние сервисы через Webhook
Еще один частый сценарий — отправка данных формы в CRM, Helpdesk или другой внешний сервис. Contact Form 7 не предоставляет встроенный Webhook, но мы можем сделать это сами с помощью PHP и хука wpcf7_mail_sent.
Пример: Отправка данных формы на внешний URL через POST-запрос
add_action('wpcf7_mail_sent', 'contactform7ru_send_data_to_webhook');
function contactform7ru_send_data_to_webhook($contact_form) {
$submission = WPCF7_Submission::get_instance();
if (!$submission) {
return;
}
$data = $submission->get_posted_data();
$payload = [
'name' => sanitize_text_field($data['your-name'] ?? ''),
'email' => sanitize_email($data['your-email'] ?? ''),
'phone' => sanitize_text_field($data['your-phone'] ?? ''),
'message' => sanitize_textarea_field($data['your-message'] ?? '')
];
$response = wp_remote_post('https://example.com/api/webhook', [
'method' => 'POST',
'headers' => ['Content-Type' => 'application/json'],
'body' => json_encode($payload),
'timeout' => 10
]);
if (is_wp_error($response)) {
error_log('Ошибка отправки webhook: ' . $response->get_error_message());
}
}
В этом примере после отправки формы данные автоматически отправляются на внешний URL в формате JSON. При необходимости можно добавить обработку ответа, логирование или повторные попытки.
Кастомная валидация полей на сервере
Хотя Contact Form 7 поддерживает клиентскую валидацию и базовые правила, иногда требуется сложная серверная проверка. Для этого используйте хук wpcf7_validate_тип_поля или общий wpcf7_validate.
Пример: Проверка, что поле с телефоном содержит только цифры
add_filter('wpcf7_validate_tel*', 'contactform7ru_validate_tel_only_digits', 20, 2);
function contactform7ru_validate_tel_only_digits($result, $tag) {
$name = $tag->name;
$value = isset($_POST[$name]) ? trim($_POST[$name]) : '';
if (!preg_match('/^\d+$/', $value)) {
$result->invalidate($tag, 'Телефон должен содержать только цифры');
}
return $result;
}
Такой код добавит проверку, которая не позволит отправить форму, если в поле телефона есть символы, отличные от цифр.
Интеграция с плагинами для расширения возможностей Contact Form 7
Для сложной автоматизации можно использовать сторонние плагины, расширяющие Contact Form 7, например:
- WPRemark — для комментирования и отзывов, интегрируется с CF7.
- Clearfy Pro — для оптимизации сайта и безопасности, помогает избежать спама в формах.
Использование таких инструментов вместе с кастомным кодом позволяет создавать мощные и гибкие решения под любые задачи.
Советы по безопасности и оптимизации
При внедрении автоматической обработки форм важно помнить о безопасности:
- Всегда используйте функции WordPress для очистки данных:
sanitize_text_field,sanitize_email,sanitize_textarea_field. - Не храните чувствительные данные в открытом виде без шифрования.
- Ограничивайте доступ к административным данным формы и базе.
- Добавляйте логирование ошибок и корректно обрабатывайте исключения.
Оптимизируйте запросы и не перегружайте сервер тяжелыми операциями в хуках отправки формы — лучше запускать асинхронные задачи через wp_cron или внешние очереди.