Contact Form 7: создание конкретных REST API эндпоинтов для отправки данных формы

Диагностика задачи: зачем создавать REST API эндпоинты для Contact Form 7

Contact Form 7 по умолчанию отправляет данные через стандартную форму на сайте, чаще всего на email. Но в проектах с нестандартной архитектурой, SPA или мобильных приложениях часто требуется отправлять данные формы напрямую на REST API WordPress, чтобы дальше обрабатывать их программно или интегрировать с внешними сервисами.

Проблема в том, что стандартный Contact Form 7 не предоставляет готовые REST API эндпоинты для отправки. Нужно самостоятельно создать кастомные маршруты, которые примут данные, валидируют их через Contact Form 7 API и вернут корректный ответ.

Шаг 1: регистрация кастомного REST API эндпоинта

Для начала создадим эндпоинт в WordPress с помощью register_rest_route. В этом примере endpoint будет принимать POST запросы с данными формы.

add_action('rest_api_init', function () {
    register_rest_route('cf7/v1', '/submit-form', [
        'methods' => 'POST',
        'callback' => 'cf7_api_submit_form',
        'permission_callback' => '__return_true',
    ]);
});

Здесь мы создаём маршрут /wp-json/cf7/v1/submit-form.

Шаг 2: обработка данных формы через API Contact Form 7

В callback-функции cf7_api_submit_form нужно получить данные из запроса, найти нужную форму по ID и запустить её валидацию и отправку.

function cf7_api_submit_form(WP_REST_Request $request) {
    $params = $request->get_json_params();
    
    if (empty($params['form_id'])) {
        return new WP_REST_Response(['error' => 'form_id is required'], 400);
    }

    $form_id = intval($params['form_id']);
    $contact_form = WPCF7_ContactForm::get_instance($form_id);

    if (!$contact_form) {
        return new WP_REST_Response(['error' => 'Form not found'], 404);
    }

    // Подготавливаем данные POST для CF7
    $_POST = [];
    if (!empty($params['fields']) && is_array($params['fields'])) {
        foreach ($params['fields'] as $key => $value) {
            $_POST[$key] = sanitize_text_field($value);
        }
    }

    // Запускаем валидацию и отправку
    $result = $contact_form->submit();

    if ($result['status'] === 'mail_sent') {
        return new WP_REST_Response(['message' => 'Form submitted successfully'], 200);
    } else {
        // Возвращаем ошибки валидации
        return new WP_REST_Response(['error' => $result['message']], 422);
    }
}

Важно: функция submit() Contact Form 7 запускает всю логику обработки формы, включая валидацию, хук на отправку письма и прочее.

Шаг 3: тестирование REST API эндпоинта

Для проверки используйте curl или Postman. Пример запроса:

curl -X POST https://your-site.ru/wp-json/cf7/v1/submit-form \
-H "Content-Type: application/json" \
-d '{
  "form_id": 1234,
  "fields": {
    "your-name": "Иван",
    "your-email": "ivan@example.com",
    "your-message": "Тестовое сообщение"
  }
}'

Ответ должен быть JSON с сообщением об успехе или ошибке.

Чек-лист для успешной интеграции REST API с Contact Form 7

  • Получить ID формы Contact Form 7, которую хотите использовать
  • Создать и зарегистрировать кастомный REST API endpoint
  • В callback-функции подготовить $_POST из данных запроса
  • Вызвать метод submit() объекта формы для обработки
  • Вернуть понятный JSON с результатом
  • Проверить корректность полей и выявить ошибки валидации

Частые ошибки и их исправление

Ошибка: форма не найдена (404)

Проверьте, что передаете правильный form_id. Его можно узнать в админке WordPress в разделе Contact Form 7.

Ошибка: валидация не проходит, но данные корректные

Contact Form 7 ждет поля с определенными именами, соответствующими форме. Проверьте, что ключи в fields совпадают с именами полей в форме.

Ошибка: письма не отправляются

Проверьте почтовую конфигурацию WordPress, SMTP настройки и логи ошибок сервера.

Практические советы по безопасности и производительности

  • В permission_callback можно реализовать проверку nonce или авторизации, если API не публичный.
  • Используйте sanitize_text_field или другие функции очистки для входящих данных.
  • Ограничьте частоту запросов к эндпоинту через плагины типа Rate Limiting или на уровне сервера.
  • Кешируйте результаты, если форма не требует мгновенного обновления.

Сравнение вариантов реализации REST API для Contact Form 7

ВариантПлюсыМинусы
Кастомный REST API эндпоинт (как в статье)Полный контроль, гибкость, интеграция с любыми клиентамиТребует программирования, тестирования, поддержки
Использование плагинов интеграции (Webhook, интеграции)Простота настройки, готовые решенияМеньше контроля, может не подходить под специфичные задачи
Отправка через AJAX стандартным методом CF7Простота, не требует APIОграничена фронтендом, сложно интегрировать с внешними системами

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

⭐⭐⭐⭐⭐
Contact Form 7: автоответы и подтверждения отправки формы в WordPress
04.11.2025
Contact Form 7: динамические поля с помощью шорткодов и фильтров
05.02.2026
Contact Form 7: решение проблем с отправкой писем через SMTP в WordPress
23.11.2025
Как добавить поле выбора даты в Contact Form 7: пошаговое руководство и примеры
05.01.2026
Contact Form 7: как реализовать живую валидацию полей с кастомным JavaScript
23.03.2026
×
WordPress
дай сайту суперсилу!

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

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