How to hook into Contact Form 7 Before Send How to hook into Contact Form 7 Before Send wordpress wordpress

How to hook into Contact Form 7 Before Send


I had to do this to prevent Email from being sent. Hope it helps.

/*    Prevent the email sending step for specific form*/add_action("wpcf7_before_send_mail", "wpcf7_do_something_else");  function wpcf7_do_something_else($cf7) {    // get the contact form object    $wpcf = WPCF7_ContactForm::get_current();    // if you wanna check the ID of the Form $wpcf->id    if (/*Perform check here*/) {        // If you want to skip mailing the data, you can do it...          $wpcf->skip_mail = true;        }    return $wpcf;}

This code assumes that you are running the latest version of CF7 your code above used to work until a couple months ago when they went and did some refactoring of the code. [Apr 28 '15]


I'd like to add that you could just use the wpcf7_skip_mail filter:

add_filter( 'wpcf7_skip_mail', 'maybe_skip_mail', 10, 2 );function maybe_skip_mail( $skip_mail, $contact_form ) {    if( /* your condition */ )        $skip_mail = true;    return $skip_mail;}


Since WPCF7 5.2 the wpcf7_before_send_mail hook has changed quite a lot. For reference, here is how to work with this hook in 5.2+

Skip mail

function my_skip_mail() {    return true; // true skips sending the email}add_filter('wpcf7_skip_mail','my_skip_mail');

Or add skip_mail to the Additional Settings tab on your form in the admin area.

Getting the Form ID or Post ID

function wpcf7_before_send_mail_function( $contact_form, $abort, $submission ) {    $post_id = $submission->get_meta('container_post_id');    $form_id = $contact_form->id();    // do something           return $contact_form;    }add_filter( 'wpcf7_before_send_mail', 'wpcf7_before_send_mail_function', 10, 3 );

Get user inputted data

function wpcf7_before_send_mail_function( $contact_form, $abort, $submission ) {    $your_name = $submission->get_posted_data('your-field-name');    // do something           return $contact_form;    }add_filter( 'wpcf7_before_send_mail', 'wpcf7_before_send_mail_function', 10, 3 );

Send the email to a dynamic recipient

function wpcf7_before_send_mail_function( $contact_form, $abort, $submission ) {    $dynamic_email = 'email@email.com'; // get your email address...    $properties = $contact_form->get_properties();    $properties['mail']['recipient'] = $dynamic_email;    $contact_form->set_properties($properties);    return $contact_form;    }add_filter( 'wpcf7_before_send_mail', 'wpcf7_before_send_mail_function', 10, 3 );