Как обработать отправку формы из HTTP POST-запроса?

Вопрос или проблема

У меня есть следующая форма в HTML на фронтенде сайта на WordPress, которую я пытаюсь преобразовать с сайта, в настоящее время построенного на NodeJS.

<form id="regForm" action="/submit-form" method="POST">
  <label for="name">Имя</label>
  <input type="text" id="name" name="name" placeholder="Введите ваше имя">
  <label for="email">Адрес электронной почты</label>
  <input type="email" id="email" name="email" placeholder="Введите ваш адрес электронной почты">
  <input type="submit" class="submit-button" value="Отправить">
</form>

Как мне создать обработчик для POST-запроса в WordPress? Ниже приведена моя текущая попытка, но она перенаправляет на мою страницу ошибки 404. Она находится в файле functions.php.

function form_submission() {
    // Проверяем, отправлена ли форма
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        // Санитизируем ввод
        $name = sanitize_text_field($_POST['name']);
        $email = sanitize_email($_POST['email']);

        // Выполняем действия, например, отправляем письмо или сохраняем данные
        //wp_mail(get_option('admin_email'), 'Новое отправление формы', "Имя: $name\nEmail: $email\nСообщение: $message");
        
        // Перенаправляем после обработки
        wp_redirect(home_url('/verify-email'));
        exit;
    }
}
add_action('form-submission', 'form_submission'); 

Ответ или решение

Уважаемый коллега,

Обработка отправки формы через HTTP POST запрос на WordPress может на первый взгляд казаться сложной задачей, особенно если ваш предыдущий опыт связан с Node.js. Однако, с подходящими инструментами и методом, WordPress предлагает гибкости и возможности для обработки таких запросов. Рассмотрим глубже шаги по реализации вашего сценария.

Теория

В WordPress формальная обработка POST-запросов может осуществляться с использованием хуков и специальных обработчиков. Как вы правильно заметили, ваш код находится в файле functions.php, что является правильным подходом в контексте обработки пользовательских запросов. Однако, ваш текущий код не работает по причине неправильного использования действий (action) и копирования механизма перенаправления.

В WordPress для обработки пользовательских форм существует несколько методов, включая использование AJAX, обработку через собственный обработчик на PHP, или же использование API-эндпоинтов. В данном случае, форма с использованием метода POST требует соответствующего маршрута и обработчика этого маршрута.

Пример

Давайте рассмотрим, как правильно настроить обработчик формы без 404 ошибки. Основная идея заключается в установке пользовательского маршрута или выполнении обработки через админский AJAX-запрос.

  1. Регистрация обработчика через init hook:

    Добавьте следующий код в файл functions.php. Он поможет создать обработчик для пути /submit-form.

    function custom_form_handler() {
       if ( $_SERVER['REQUEST_METHOD'] == 'POST' && $_SERVER['REQUEST_URI'] == '/submit-form' ) {
           // Обрабатываем данные формы
           $name = sanitize_text_field($_POST['name']);
           $email = sanitize_email($_POST['email']);
    
           // Пример: отправка электронной почты админу
           wp_mail(get_option('admin_email'), 'New Form Submission', "Name: $name\nEmail: $email");
    
           // Редирект после успешной обработки
           wp_redirect(home_url('/thank-you'));
           exit;
       }
    }
    add_action('init', 'custom_form_handler');
  2. Создание страницы для перенаправления:

    Создайте страницу в WordPress с URL /thank-you. Это позволит пользователям видеть страницу подтверждения после успешной отправки формы.

Применение

После корректной настройки вашего обработчика, форма будет успешно обрабатывать данные. Эта реализация предполагает, что вы контролируете маршруты и контент, доступный на вашем сайте. Также важно убедиться, что ваш сервер корректно обрабатывает POST-запросы и что URL-адреса согласованы с установленными правилами перенаправления.

Что может пойти не так? Убедитесь, что в вашей теме или плагинах нет конфликтов, которые могут перезаписать правила .htaccess или использовать свои хуки, которые могут изменить стандартное поведение WordPress.

Дополнительные Рекомендации

  1. Используйте Nonces для безопасности: защитите ваши формы с помощью nonces, чтобы предотвратить CSRF-атаки. Это достигается с помощью функции wp_nonce_field() в HTML и проверки check_admin_referer() в обработчике.

  2. Логирование ошибок: в целях отладки используйте WP_DEBUG или такие инструменты как error_log(), чтобы отслеживать возможные ошибки или исключения.

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

Таким образом, следуя указанным шагам и рекомендациям, вы сможете эффективно обрабатывать запросы формы на вашем WordPress сайте, сохраняя возможность возврата к системе Node.js при необходимости для сравнения или миграции. Надеюсь, эти инструкции помогут вам успешно завершить развертывание формы на платформе WordPress.

С уважением,
[Ваше имя]

Оцените материал
Добавить комментарий

Капча загружается...