联系表格7:使用wpcf7_before_send_mail创建的钩子仅用于id的一个联系表格

时间:2015-05-29 15:16:23

标签: php wordpress forms wordpress-plugin contact-form-7

我正在使用Contact Form 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 ) );

 }

我想弄清楚如何只将这些值传递给其中一个联系表单电子邮件模板,可能是通过表单ID。

3 个答案:

答案 0 :(得分:13)

联系表单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;

}

希望这有帮助。

答案 1 :(得分:4)

我正在使用Dinesh的答案,但它已停止为我工作。相反,我现在正在检查我提交的表单所特有的字段:

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获取表单ID,但这很有用,我对结果很满意。

答案 2 :(得分:0)

自2015年以来,此插件中检索表单ID和提交字段的方法已更改。

要获取表单ID,您应该使用以下代码:

START /wait PowerShell.exe "& "'C:\path\TheScriptToBeExecuted.ps1'

要获取提交数据,您应该使用它(而不是$ _POST):

$form_id = $contact_form->id();

将所有内容放在一起,您的代码段应如下所示:

$submission = WPCF7_Submission::get_instance();
$posted_data = $submission->get_posted_data();