wpforms.ru wordpress WPForms.ru

Как настроить отложенную отправку формы по расписанию

Иногда в проектах на WordPress возникает задача не сразу отправлять данные, введённые пользователем в форму, а отложить эту отправку на определённое время. Например, для рассылки подтверждений, создания отложенных задач или иных бизнес-процессов. В стандартном функционале WPForms такой возможности нет, но её можно реализовать самостоятельно с помощью PHP и встроенного планировщика задач WP-Cron.

Почему может понадобиться отложенная отправка формы в WPForms

Отложенная отправка формы часто нужна в случаях, когда:

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

В WPForms нет встроенной функции отложенной отправки, но с помощью хуков и WP-Cron вы можете реализовать этот функционал самостоятельно.

Как реализовать отложенную отправку формы WPForms с помощью WP-Cron

WPForms предоставляет хук wpforms_process_complete, который срабатывает после успешной отправки формы. Мы можем перехватить этот момент и не отправлять уведомления сразу, а записать данные в таблицу или transient, и запланировать задачу на выполнение позже.

Ниже пример, как это сделать:

add_action('wpforms_process_complete', 'wpformsru_schedule_delayed_email', 10, 4); function wpformsru_schedule_delayed_email($fields, $entry, $form_data, $entry_id) {    // Получаем email пользователя из полей формы    $user_email = '';    foreach ($fields as $field) {        if ($field['type'] === 'email') {            $user_email = $field['value'];            break;        }    }    if (empty($user_email)) {        return;    }    // Планируем событие через 1 час    if (!wp_next_scheduled('wpformsru_send_delayed_email', array($entry_id))) {        wp_schedule_single_event(time() + 3600, 'wpformsru_send_delayed_email', array($entry_id));    } }

В этом коде мы планируем задачу wpformsru_send_delayed_email, которая сработает через час после отправки формы. Для отправки письма нужно добавить обработчик этого события:

add_action('wpformsru_send_delayed_email', 'wpformsru_handle_delayed_email'); function wpformsru_handle_delayed_email($entry_id) {    // Получаем данные отправленной формы по ID записи    global $wpdb;    $table = $wpdb->prefix . 'wpforms_entries';    $entry = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table WHERE entry_id = %d", $entry_id));    if (!$entry) {        return;    }    // Декодируем данные полей из JSON    $fields = json_decode($entry->fields, true);    $user_email = '';    foreach ($fields as $field) {        if ($field['type'] === 'email') {            $user_email = $field['value'];            break;        }    }    if (empty($user_email)) {        return;    }    // Отправляем email (пример простого письма)    $subject = 'Спасибо за вашу заявку';    $message = 'Ваши данные успешно получены и будут обработаны в ближайшее время.';    wp_mail($user_email, $subject, $message); }

Обработка ошибок и повторные попытки отправки

При работе с отложенной отправкой важно учитывать возможные ошибки: сбои почтового сервера, недоступность базы данных, отключение WP-Cron. Для надёжности можно добавить логику повторных попыток.

Реализуйте в обработчике wpformsru_handle_delayed_email проверку результата wp_mail. Если отправка не удалась, повторно планируйте задачу с задержкой.

Пример добавления повторной попытки:

function wpformsru_handle_delayed_email($entry_id, $attempt = 1) {    // ... предыдущий код ...    $sent = wp_mail($user_email, $subject, $message);    if (!$sent && $attempt < 3) {        // Повторить через 10 минут        wp_schedule_single_event(time() + 600, 'wpformsru_send_delayed_email_retry', array($entry_id, $attempt + 1));    } } add_action('wpformsru_send_delayed_email_retry', 'wpformsru_handle_delayed_email', 10, 2);

Использование плагинов для отложенной отправки уведомлений

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

  • WPForms Advanced Notifications — позволяет создавать сложные сценарии уведомлений с задержкой и условиями.
  • Clearfy Pro — улучшает работу и безопасность WPForms, в том числе с уведомлениями.

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

Советы по оптимизации и безопасности

Использование WP-Cron для отложенной отправки — удобный способ, но он зависит от посещаемости сайта. Для высоконагруженных проектов лучше настроить системный cron на сервере, чтобы гарантировать выполнение задач вовремя.

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

Регулярно проверяйте логи ошибок и корректность выполнения отложенных задач. Для этого можно использовать плагины логирования или собственные записи через error_log.

Итог

Отложенная отправка формы в WPForms — реальная задача, решаемая через хуки и WP-Cron. Такой подход расширяет возможности форм и помогает автоматизировать сложные процессы. При необходимости используйте и готовые плагины с расширенными функциями.

×
День SEO
Время сделать подарок своему WordPress!
-20% на премиум

шаблоны и плагины

Порадуй свой сайт ⋙