Contact Form 7 — это один из самых популярных плагинов для создания форм обратной связи в WordPress. Несмотря на богатый набор настроек, иногда возникает необходимость добавить собственную логику или интеграцию, которую стандартный функционал не поддерживает. В таких случаях на помощь приходят хуки — специальные точки расширения, которые позволяют внедрять свой код в процесс обработки формы.
Что такое хуки в Contact Form 7 и зачем они нужны
Хуки — это события и фильтры, которые плагин вызывает во время работы. Они позволяют перехватывать данные, изменять их, добавлять новую логику, отправлять данные в сторонние системы и многое другое. Для Contact Form 7 разработчики предусмотрели несколько ключевых хуков, с которыми можно работать как на стороне отправки формы, так и после успешной отправки.
Использование хуков — это эффективный способ кастомизации, который не требует модификации исходных файлов плагина, что важно для сохранения совместимости при обновлениях.
Основные хуки Contact Form 7 для расширения функциональности
Хук wpcf7_before_send_mail — модификация данных перед отправкой
Этот хук срабатывает сразу после валидации формы и перед отправкой email. Он позволяет получить объект формы, изменить данные, добавить новые заголовки письма или даже отменить отправку.
Пример использования для добавления дополнительного заголовка в письмо:
add_action('wpcf7_before_send_mail', 'contactform7ru_before_send_mail_custom_header');
function contactform7ru_before_send_mail_custom_header($contact_form) {
$mail = $contact_form->prop('mail');
$mail['headers'] .= "\nX-Custom-Header: ContactForm7RU";
$contact_form->set_properties(array('mail' => $mail));
}Фильтр wpcf7_validate_text* — кастомная валидация полей
Если стандартная валидация Contact Form 7 не подходит, можно добавить свою проверку через этот фильтр. Например, проверка, что поле содержит только кириллицу:
add_filter('wpcf7_validate_text*', 'contactform7ru_custom_text_validation', 20, 2);
function contactform7ru_custom_text_validation($result, $tag) {
$name = $tag->name;
$value = isset($_POST[$name]) ? trim($_POST[$name]) : '';
if ($name === 'your-name') {
if (!preg_match('/^[а-яё\s]+$/iu', $value)) {
$result->invalidate($tag, 'Пожалуйста, вводите только кириллицу.');
}
}
return $result;
}Хук wpcf7_mail_sent — действия после успешной отправки формы
Отличное место для интеграции с внешними системами, например, отправка данных в CRM, запись в базу или создание задачи. Пример отправки данных в сторонний API через POST-запрос:
add_action('wpcf7_mail_sent', 'contactform7ru_send_data_to_api');
function contactform7ru_send_data_to_api($contact_form) {
$submission = WPCF7_Submission::get_instance();
if ($submission) {
$data = $submission->get_posted_data();
$response = wp_remote_post('https://example.com/api/submit', array(
'body' => json_encode(array(
'name' => $data['your-name'],
'email' => $data['your-email'],
'message' => $data['your-message'],
)),
'headers' => array('Content-Type' => 'application/json'),
));
}
}Практические примеры использования хуков для решения задач
1. Автоматическое заполнение скрытого поля с IP-адресом пользователя
Иногда важно знать IP пользователя, который отправил форму. Добавим в форму скрытое поле [hidden user-ip] и заполним его при отправке:
add_action('wpcf7_before_send_mail', 'contactform7ru_fill_hidden_ip');
function contactform7ru_fill_hidden_ip($contact_form) {
$submission = WPCF7_Submission::get_instance();
if ($submission) {
$data = $submission->get_posted_data();
$data['user-ip'] = $_SERVER['REMOTE_ADDR'];
$submission->set_posted_data($data);
}
}2. Запрет отправки формы с определёнными ключевыми словами
Чтобы защититься от спама или нежелательных сообщений, можно добавить проверку и отменять отправку, если в тексте есть запрещённые слова:
add_filter('wpcf7_validate_textarea*', 'contactform7ru_block_bad_words', 20, 2);
function contactform7ru_block_bad_words($result, $tag) {
$name = $tag->name;
$value = isset($_POST[$name]) ? trim($_POST[$name]) : '';
$bad_words = array('spamword1', 'badword2');
foreach ($bad_words as $word) {
if (stripos($value, $word) !== false) {
$result->invalidate($tag, 'Текст содержит запрещённые слова.');
break;
}
}
return $result;
}Дополнительные советы и рекомендации
При работе с хуками Contact Form 7 обязательно проверяйте, что ваш код корректно работает на тестовой среде и не нарушает логику отправки формы. Рекомендуется использовать префиксы в названиях функций, например, contactform7ru_, чтобы избежать конфликтов с другими плагинами.
Для упрощения управления формами и расширения возможностей можно рассмотреть плагины, которые дополняют Contact Form 7, например, Clearfy Pro — он улучшает безопасность и оптимизацию WordPress, что полезно при работе с формами.
Используйте хуки для гибкой и мощной кастомизации Contact Form 7 — это позволит создавать уникальные решения под любые задачи без потери стабильности и безопасности сайта.