Есть ли хук создания новой записи через WPForms?

Ссылка скопирована
1 ответ

Подскажите, есть ли хук, который вызывается при создании новой записи с WPForms?

Как у Elementor, только для WPForms:

add_action( 'elementor_pro/forms/new_record', function( $record, $handler ){}

add_action( 'elementor_pro/forms/new_record', function( $record, $handler ){}

Дополнительно:

Решение

// Хук add_action('wpforms_process_complete',  'my_custom_function');  function my_custom_function($data){  }

// Хук add_action('wpforms_process_complete', 'my_custom_function'); function my_custom_function($data){ }

Ответы:

wp_insert_post, save_post, publish_post. Что-то из этого наверняка отработает нужное событие

  • Немного не то, срабатывает, когда добавляют любой пост в бд — потребуется дополнительная проверка по типу поста
  • save_post_post и похожие хуки, которые сразу отрабатывают стандартные типы
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Сергей Миронов Ответ

Да, у WPForms есть хук, который срабатывает после успешной отправки и валидации формы. Ближайший аналог Elementor new_record — это wpforms_process_complete. Его обычно используют для отправки данных в CRM, Telegram, внешнее API, создания записей WordPress или логирования заявки.

Минимальный пример:

add_action('wpforms_process_complete', function ($fields, $entry, $form_data, $entry_id) {
    $form_id = (int) $form_data['id'];
 
    if ($form_id !== 123) {
        return;
    }
 
    $name = '';
    $email = '';
 
    foreach ($fields as $field) {
        if ($field['name'] === 'Имя') {
            $name = sanitize_text_field($field['value']);
        }
        if ($field['name'] === 'Email') {
            $email = sanitize_email($field['value']);
        }
    }
 
    wp_insert_post([
        'post_type' => 'lead',
        'post_status' => 'publish',
        'post_title' => $name ?: 'Новая заявка',
        'post_content' => 'Email: ' . $email,
    ]);
}, 10, 4);

add_action('wpforms_process_complete', function ($fields, $entry, $form_data, $entry_id) { $form_id = (int) $form_data['id']; if ($form_id !== 123) { return; } $name = ''; $email = ''; foreach ($fields as $field) { if ($field['name'] === 'Имя') { $name = sanitize_text_field($field['value']); } if ($field['name'] === 'Email') { $email = sanitize_email($field['value']); } } wp_insert_post([ 'post_type' => 'lead', 'post_status' => 'publish', 'post_title' => $name ?: 'Новая заявка', 'post_content' => 'Email: ' . $email, ]); }, 10, 4);

Если у Вас платная версия WPForms и включено хранение записей, можно использовать $entry_id. Если Lite-версия, записи могут не сохраняться в базе, но сам хук всё равно позволяет обработать данные в момент отправки.

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

Для отладки временно запишите в лог весь массив $fields и посмотрите реальные ID, имена и значения. После настройки логирование полных заявок лучше убрать, особенно если в форме есть телефоны, email или персональные данные. В рабочем коде оставляйте только ошибки интеграции и технический статус отправки.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

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

Вам также может быть интересно