Contact Form 7: use hook created using wpcf7_before_send_mail for only one contact form by id Contact Form 7: use hook created using wpcf7_before_send_mail for only one contact form by id wordpress wordpress

Contact Form 7: use hook created using wpcf7_before_send_mail for only one contact form by id


Contact Form 7 uses hidden input type to store form id. It uses hidden field name _wpcf7. You can get the form Id like this way.

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

So you final code should be

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

Hope this helps.


The methods for retrieving the form ID and submitted fields have changed in this plugin since 2015, and again in 2020 since writing this answer.

To get the form ID, you should use this:

$form_id = $contact_form->id();

To get the submission data you should use this (instead of $_POST). The function get_posted_data() returns a string (if you supplied a key to pull specifically) or an array of string values (if no parameters are sent and you want everything).

$posted_data = $submission->get_posted_data();

To put it all together, your snippet would look like this:

add_action( 'wpcf7_before_send_mail', 'wpcf7_add_text_to_mail_body', 10, 3 );function wpcf7_add_text_to_mail_body( $contact_form, $abort, $submission ) {    //Get the form ID    $form_id = $contact_form->id();    //Do something specifically for form with the ID "123"    if( $form_id == 123 ) {        $posted_data = $submission->get_posted_data();        $values_list = $posted_data['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 ) );    }}

Below is the original snippet I wrote in this answer and can be used for older versions of Contact Form 7 that do not pass the $submission variable.

add_action( 'wpcf7_before_send_mail', 'wpcf7_add_text_to_mail_body', 10, 1 );function wpcf7_add_text_to_mail_body( $contact_form ) {    //Get the form ID    $form_id = $contact_form->id();    //Do something specifically for form with the ID "123"    if( $form_id == 123 ) {        $submission = WPCF7_Submission::get_instance();//Get the current form submission        $posted_data = $submission->get_posted_data();        $values_list = $posted_data['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 ) );    }}


I was using Dinesh's answer, but it stopped working for me. Instead, I am now checking for a field that is unique to the form I'm submitting:

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   }}

Be sure to have at least one unique form name in each of your forms that you can use to do this. It might still be possible to get the form ID from $contact_form via a function, but this worked and I was content with the result.