mysql — получить контактную форму 7 ID формы в переполнении стека

Я использую контактную форму 7 для загрузки двух разных форм на страницу, а затем, помимо отправки электронного письма, динамически добавляю эту информацию в базу данных. К сожалению, из-за плагина я не могу просто создать все входы с разными именами, чтобы избежать необходимости в фильтре. Итак, по сути, я хотел бы вставить идентификатор формы в ловушку действия и динамически создать переменную $ data, основанную на том, какая форма отправляется, но я не уверен, как получить идентификатор формы cf7. Кто-нибудь знает, как сделать это, или, возможно, более выполнимый способ сделать это?

Форма Шорткоды

[contact-form-7 id="221" title="Reg 1"] [contact-form-7 id="112" title="Reg 2"]

PHP Action Hook в functions.php

function save_form( $wpcf7 ) {


global $wpdb;

$form_to_DB = WPCF7_Submission::get_instance();

if($form_to_DB) {
$formData = $form_to_DB->get_posted_data();
}

if("Request a Free Demo" != $formData['demo_request'][0]){
$freeDemo = "yes";}else { $freeDemo = "nope";}

if(THE FORM ID = 221) {
$data = array(
some values from the 112 form
$wpdb->insert( $wpdb->prefix . 'registrations', $data );
);
}elseif(THE FORM ID = 112) {
$data = array(
some other values from the 112 form
$wpdb->insert( $wpdb->prefix . 'registrations_2', $data );
);
}



}
remove_all_filters('wpcf7_before_send_mail');
add_action('wpcf7_before_send_mail', 'save_form' );

1

Решение

Я склонен использовать ловушку действия «wpcf7_posted_data» (хотя это могло измениться, так как вопрос уже устарел). Вам не нужно удалять все фильтры.

Например:

function processForm($cf7) {
$wpcf7 = WPCF7_ContactForm::get_current();
if($wpcf7->id == 221) {
//Do Stuff
}
elseif($wpcf7->id == 112) {
//Do different stuff
}
}

add_action("wpcf7_posted_data", "processForm");
3

Другие решения

просто используйте это:

function save_form( $wpcf7 ) {
if($wpcf7->id == 4711) {
// whatever
}
}
1

РЕШИТЬ:

Я просто использовал логический оператор, чтобы проверить, было ли поле, специфичное для формы, пустым или нет. Если поле «form_2_name» было пустым при отправке формы, то мы знаем, что форма 1 отправляется. Простое, если утверждение с этой логикой добилось цели!

0

$wpcf7->idбольше не доступен, используйте $wpcf7->id() вместо.

0