Контактная форма 7: используйте хук, созданный с помощью wpcf7_before_send_mail только для одной контактной формы по идентификатору

Я работаю над сайтом с несколькими формами, созданными с использованием контактной формы 7. Для одной из этих форм я передаю переменные, которые я собрал, используя скрытое поле ввода в форме. Я передаю эти переменные в электронное письмо, используя хук wpcf7_before_send_mail, но эти значения передаются в каждое электронное письмо (я добавил динамические переменные, а также статический текст). Вот код:

add_action( 'wpcf7_before_send_mail', 'wpcf7_add_text_to_mail_body' );

function wpcf7_add_text_to_mail_body($contact_form){
$values_list = $_POST['valsitems'];
$values_str = implode(", ", $values_list);

// get mail property
$mail = $contact_form->prop( 'mail' ); // returns array

// add content to email body
$mail['body'] .= 'INDUSTRIES SELECTED';
$mail['body'] .= $values_list;


// set mail property with changed value(s)
$contact_form->set_properties( array( 'mail' => $mail ) );

}

Я пытаюсь выяснить, как передать эти значения только одному из шаблонов электронной почты контактной формы, возможно, через идентификатор формы.

8

Решение

Контактная форма 7 использует скрытый тип ввода для хранения идентификатора формы. Используется скрытое имя поля _wpcf7. Вы можете получить форму Id, как этот способ.

$form_id = $contact_form->posted_data['_wpcf7'];

Таким образом, ваш окончательный код должен быть

add_action( 'wpcf7_before_send_mail', 'wpcf7_add_text_to_mail_body' );

function wpcf7_add_text_to_mail_body($contact_form){
$form_id = $contact_form->posted_data['_wpcf7'];
if ($form_id == 123): // 123 => Your Form ID.
$values_list = $_POST['valsitems'];
$values_str = implode(", ", $values_list);

// get mail property
$mail = $contact_form->prop( 'mail' ); // returns array

// add content to email body
$mail['body'] .= 'INDUSTRIES SELECTED';
$mail['body'] .= $values_list;


// set mail property with changed value(s)
$contact_form->set_properties( array( 'mail' => $mail ) );
endif;

}

Надеюсь это поможет.

13

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

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

add_action( 'wpcf7_before_send_mail', 'wpcf7_add_text_to_mail_body' );
function wpcf7_add_text_to_mail_body($contact_form){

$submission = WPCF7_Submission::get_instance();
$posted_data = $submission->get_posted_data();
if( !empty($posted_data["dealer_email"])){  //use a field unique to your form

$email = trim($posted_data["dealer_email"]);
// more custom stuff here
}
}

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

4