Contact Form 7: универсальные хуки для расширения функциональности

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 — это позволит создавать уникальные решения под любые задачи без потери стабильности и безопасности сайта.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Contact Form 7: Автозаполнение полей формы по IP-адресу пользователя
20.02.2026
Contact Form 7: как добавить отзывы после отправки формы в WordPress
11.02.2026
Contact Form 7 и Google Tag Manager: как настроить отслеживание отправки формы
13.04.2026
Contact Form 7: динамические поля с подгрузкой данных из JSON файла
10.04.2026
Contact Form 7: общие проблемы и решения с AJAX отправкой формы
30.01.2026
×
WordPress
дай сайту суперсилу!

Скидки на топовые темы и плагины

Активировать суперсилу ⋙