Как создать собственный обработчик формы в WordPress для WPForms

Введение в обработчики форм в WordPress и WPForms

WPForms — один из самых популярных плагинов для создания форм на WordPress. По умолчанию он предоставляет удобный интерфейс создания форм и базовую обработку данных, однако в некоторых случаях стандартных возможностей недостаточно. Например, если нужно отправить данные формы в стороннюю систему, выполнить сложную валидацию или изменить стандартный процесс обработки, требуется создать собственный обработчик формы.

В этой статье мы подробно разберём, как в WordPress с WPForms реализовать собственный обработчик формы, используя хуки и фильтры плагина. Это позволит гибко управлять данными формы, расширять функциональность и интегрировать WPForms с другими сервисами.

Почему стоит создавать собственный обработчик формы

Стандартный обработчик WPForms отлично подходит для большинства задач, но есть ситуации, когда нужна дополнительная логика:

  • Отправка данных в CRM или другие внешние API;
  • Дополнительная валидация данных, недоступная в стандартных настройках;
  • Логирование или сохранение данных в кастомные таблицы базы данных;
  • Динамическая модификация данных перед сохранением;
  • Триггеринг дополнительных действий после отправки формы.

Создание собственного обработчика решает эти задачи и повышает гибкость решений на базе WPForms.

Как работает обработка форм в WPForms: основные хуки

WPForms предоставляет несколько хуков для работы с отправкой формы. Основные из них:

  • wpforms_process_complete — срабатывает после успешной обработки формы, можно получить все данные и выполнить дополнительные действия;
  • wpforms_process_before_send_email — позволяет изменить данные перед отправкой email;
  • wpforms_process_validate — позволяет добавить собственную валидацию;
  • wpforms_process — основной хук обработки, можно вмешаться в процесс.

Пример использования хука для перехвата данных после отправки формы:

add_action('wpforms_process_complete', 'wpformru_custom_form_handler', 10, 4);
function wpformru_custom_form_handler($fields, $entry, $form_data, $entry_id) {
    // Здесь $fields — массив с данными полей формы
    // $entry — информация о записи в базе
    // $form_data — данные формы
    // $entry_id — ID записи

    // Пример: отправка данных в сторонний API
    $data = [];
    foreach ($fields as $field) {
        $data[$field['name']] = $field['value'];
    }

    $response = wpformru_send_data_to_api($data);
    if ($response['status'] !== 'success') {
        // Логируем ошибку или выполняем другие действия
        error_log('Ошибка отправки данных в API: ' . print_r($response, true));
    }
}

function wpformru_send_data_to_api($data) {
    $api_url = 'https://example.com/api/receive';
    $args = [
        'body' => json_encode($data),
        'headers' => [
            'Content-Type' => 'application/json',
        ],
        'timeout' => 15,
    ];

    $response = wp_remote_post($api_url, $args);
    if (is_wp_error($response)) {
        return ['status' => 'error', 'message' => $response->get_error_message()];
    }

    $code = wp_remote_retrieve_response_code($response);
    if ($code !== 200) {
        return ['status' => 'error', 'message' => 'HTTP code ' . $code];
    }

    return ['status' => 'success'];
}

Добавление собственной валидации формы в WPForms

Иногда нужна более сложная проверка данных, чем доступна в стандартных настройках WPForms. Для этого используется фильтр wpforms_process_validate.

Пример: запретить отправку формы, если в поле "Телефон" введены буквы:

add_filter('wpforms_process_validate', 'wpformru_validate_phone_field', 10, 3);
function wpformru_validate_phone_field($errors, $fields, $form_data) {
    foreach ($fields as $field) {
        if ($field['name'] === 'Телефон') {
            if (!preg_match('/^\+?[0-9\-\s]{7,15}$/', $field['value'])) {
                $errors[$field['id']] = 'Пожалуйста, введите корректный номер телефона';
            }
        }
    }
    return $errors;
}

В этом примере мы проверяем, что в поле «Телефон» содержатся только цифры, пробелы, дефисы и опционально знак + в начале. Если проверка не проходит, добавляем ошибку, которая отобразится пользователю.

Сохранение данных формы в отдельную таблицу базы данных

Иногда нужно хранить данные формы отдельно от стандартных записей WPForms. Для этого можно создать новую таблицу в базе данных и записывать туда данные при отправке формы.

Пример создания таблицы при активации темы или плагина:

function wpformru_create_custom_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpformru_submissions';

    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
      id mediumint(9) NOT NULL AUTO_INCREMENT,
      form_id mediumint(9) NOT NULL,
      submission_data longtext NOT NULL,
      submitted_at datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
      PRIMARY KEY  (id)
    ) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}
register_activation_hook(__FILE__, 'wpformru_create_custom_table');

И пример записи данных в эту таблицу при отправке формы:

add_action('wpforms_process_complete', 'wpformru_save_submission_to_custom_table', 10, 4);
function wpformru_save_submission_to_custom_table($fields, $entry, $form_data, $entry_id) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpformru_submissions';

    $data = [];
    foreach ($fields as $field) {
        $data[$field['name']] = $field['value'];
    }

    $wpdb->insert(
        $table_name,
        [
            'form_id' => $form_data['id'],
            'submission_data' => maybe_serialize($data),
            'submitted_at' => current_time('mysql'),
        ]
    );
}

Таким образом, вы сможете хранить и затем обрабатывать данные отправленных форм отдельно, например для интеграции с CRM или аналитикой.

Использование сторонних плагинов для расширения обработки форм

Кроме собственного кода, можно использовать плагины, которые расширяют функциональность WPForms:

  • WP Webhooks — позволяет отправлять данные формы в любые внешние сервисы через вебхуки;
  • WPForms Hooks Addon — добавляет дополнительные хуки и фильтры для более гибкой настройки;
  • FluentCRM — интеграция с CRM для автоматической работы с контактами из форм;
  • WP All Export — экспорт данных форм в удобном формате.

Однако если нужны уникальные сценарии, лучше создавать собственные обработчики, как описано выше.

Советы по отладке и безопасности при создании обработчиков форм

При работе с собственными обработчиками важно учитывать несколько моментов:

  • Проверяйте и фильтруйте все входящие данные, чтобы избежать XSS и SQL-инъекций;
  • Используйте wp_nonce_field и проверяйте nonce при обработке, если создаёте свои формы;
  • Включите логирование ошибок для быстрого выявления проблем;
  • Тестируйте на разных формах и сценариях, чтобы избежать конфликтов;
  • Обязательно делайте резервные копии перед внесением изменений.

Правильный подход к безопасности и отладке обеспечит стабильную и безопасную работу вашего сайта.

Интеграция WPForms с SMS-уведомлениями: настройка и примеры кода
25.12.2025
WordPress автоматическое сохранение формы WPForms: как сделать и настроить
16.11.2025
Интеграция WPForms с Telegram: настройка и примеры кастомных уведомлений
02.01.2026
Как создать свой уникальный шаблон для форм в WordPress с помощью WPForms
03.11.2025
WPForms: как автоматически сохранять данные форм в базу данных WordPress
18.12.2025