Я работаю над сайтом с несколькими формами, созданными с использованием контактной формы 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 ) );
}
Я пытаюсь выяснить, как передать эти значения только одному из шаблонов электронной почты контактной формы, возможно, через идентификатор формы.
Контактная форма 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;
}
Надеюсь это поможет.
Я использовал ответ Динеша, но он перестал работать для меня. Вместо этого я сейчас проверяю поле, уникальное для формы, которую я отправляю:
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 через функцию, но это сработало, и я был доволен результатом.