Контактная форма 7 get_posted_data не работает в хуке wpcf7_before_send_mail - PullRequest
0 голосов
/ 16 мая 2018

Я позаимствовал этот код из stackoverflow в попытке найти решение.Мне нужно создать новый пост из представленных данных в форме.Я использовал фильтр:

  add_filter( 'wpcf7_posted_data', 'save_new_booked_event_data' );

, но обнаружил, что он срабатывает после каждой отправки, а не ПОСЛЕ проверки.Поэтому я перешел к следующему коду:

 add_action('wpcf7_before_send_mail','contactform7_before_send_mail',1);function 
    contactform7_before_send_mail( $contact_form ) {       
         if ( !isset($contact_form->posted_data) && class_exists('WPCF7_Submission') ) {
                 $submission = WPCF7_Submission::get_instance();
            if ( $submission ) {
                 $formData = $submission->get_posted_data();   
                 $formField = $formData['_wpcf7'];     
                 update_post_meta(199, 'first_name', $formField);
    }
} else {
    // We can't retrieve the form data
    return $contact_form;
}
   return $contact_form;
}

Пять часов спустя: метод get_posted_data всегда имеет значение NULL.Я пытался подойти к нему с разных сторон, включая отключение AJAX и размещение формы.Я проверил и выгрузил каждый объект, чтобы убедиться, что он работает, но всегда имеет значение NULL.Что мне здесь не хватает?Пожалуйста, кто-нибудь?

Спасибо!

1 Ответ

0 голосов
/ 16 мая 2018

Образованное предположение:

Метод get_posted_data опирается на setup_posted_data, сначала, и , который происходит, когда конструктор для *Вызывается класс 1010 * .

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

В таком случае вы можете переопределить и принудительно заполнить заполненные данные для своей формы, если передадите экземпляр WPCF7_ContactForm на вызов WPCF7_Submission::get_instance();.

Что-то вроде:

$form       = new WPCF7_ContactForm($id_of_your_form);
$submission = WPCF7_Submission::get_instance($form);

Кстати!Ваш фрагмент выглядит как этот плагин wordpress .(Форма для публикации) Если вам нужно более настраиваемое решение или просмотреть контекст, в котором оно находится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...