Contact Form 7 и автоматизация обработки заявок с помощью PHP и WP хуков

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 или внешние очереди.

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

⭐⭐⭐⭐⭐
Contact Form 7: защита от спама с помощью Honeypot
07.03.2026
Contact Form 7 и отправка данных на внешний сервер через REST API
10.03.2026
Contact Form 7: как добавить кастомную валидацию полей в WordPress
19.11.2025
Contact Form 7: как настроить и изменить заголовки email для отправки писем
01.03.2026
Contact Form 7: создание конкретных REST API эндпоинтов для отправки данных формы
26.04.2026
×
WordPress
дай сайту суперсилу!

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

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