草庐IT

php - 联系表格 7 : use hook created using wpcf7_before_send_mail for only one contact form by id

coder 2023-12-31 原文

我在一个网站上工作,该网站有多个使用 Contact Form 7 创建的表单。对于其中一个表单,我正在传递我使用表单中的隐藏输入字段收集的变量。我使用 wpcf7_before_send_mail Hook 将这些变量传递到电子邮件中,但这些值传递到每封电子邮件中(我添加了动态变量和静态文本)这是代码:

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 ) );

 }

我正在尝试弄清楚如何仅将这些值传递给联系表单电子邮件模板之一,可能是通过表单 ID。

最佳答案

Contact Form 7 使用隐藏的输入类型来存储表单 ID。它使用隐藏字段名称 _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;

}

希望这对您有所帮助。

关于php - 联系表格 7 : use hook created using wpcf7_before_send_mail for only one contact form by id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30533216/

有关php - 联系表格 7 : use hook created using wpcf7_before_send_mail for only one contact form by id的更多相关文章

随机推荐