Get Contact Form 7 Form ID In PHP
Asked Answered
M

5

6

I'm using contact form 7 to load two different forms into a page and then, in addition to sending the email, dynamically adding that information to a database. Unfortunately, because of the plugin, I can't simply just create all inputs with different names to avoid needing a filter. So, essentially, I'd like to pull the form ID into the action hook and dynamically create the $data variable based on which form is being submitted, but I'm not sure how to get the cf7 form ID. Does anyone know how to accomplish this, or perhaps a more feasible way of doing it?

Form Shortcodes

[contact-form-7 id="221" title="Reg 1"] [contact-form-7 id="112" title="Reg 2"]

PHP Action Hook in functions.php

function save_form( $wpcf7 ) {


global $wpdb;

   $form_to_DB = WPCF7_Submission::get_instance();

   if($form_to_DB) {
       $formData = $form_to_DB->get_posted_data(); 
   }

   if("Request a Free Demo" != $formData['demo_request'][0]){
   $freeDemo = "yes";}else { $freeDemo = "nope";}

   if(THE FORM ID = 221) {
   $data = array(
          some values from the 112 form
      $wpdb->insert( $wpdb->prefix . 'registrations', $data );
   );
   }elseif(THE FORM ID = 112) {
     $data = array(
          some other values from the 112 form
   $wpdb->insert( $wpdb->prefix . 'registrations_2', $data );
   );
   }



}
remove_all_filters('wpcf7_before_send_mail');
add_action('wpcf7_before_send_mail', 'save_form' );
Mitsue answered 22/9, 2015 at 3:31 Comment(0)
M
0

SOLVED:

I wound up just using a logical operator to check if a form specific field was empty or not. If the field "form_2_name" was empty when a form was submitted, then we know that form 1 is being submitted. Simple if statement with that logic did the trick!

Mitsue answered 28/9, 2015 at 21:38 Comment(0)
C
19

I tend to use the "wpcf7_posted_data" action hook (though this might have changed as the question is a bit old now). You don't need to remove all filters.

For example:

function processForm($cf7)
{
    $wpcf7 = WPCF7_ContactForm::get_current();

    $form_id = $wpcf7->id;

    if ($form_id === 221)
    {
        //Do Stuff
    }

    else if ($form_id === 112)
    {
        //Do different stuff
    }
}

add_action("wpcf7_posted_data", "processForm");
Commissure answered 13/6, 2017 at 9:29 Comment(3)
This is the answer should have been marked as the correct oneMezzorilievo
Got this message: PHP Deprecated: id property of a WPCF7_ContactForm object is no longer accessible. Use id() method instead.Feeling
Also, wpcf7_posted_data is a filter now, not an action. For actions you can use wpcf7_before_send_mail or wpcf7_mail_sentFeeling
G
6

$wpcf7->idis no longer accessible, use $wpcf7->id() instead.

Genethlialogy answered 8/3, 2018 at 11:57 Comment(0)
A
4

simply use this:

function save_form( $wpcf7 ) {
    if($wpcf7->id == 4711) {
        // whatever
    }
}
Adorne answered 11/1, 2017 at 14:35 Comment(1)
Add some explanation with answer for how this answer help OP in fixing current issueGruber
D
1

You can use this: $form_id = $_POST['_wpcf7'];

Doherty answered 1/8, 2019 at 14:24 Comment(0)
M
0

SOLVED:

I wound up just using a logical operator to check if a form specific field was empty or not. If the field "form_2_name" was empty when a form was submitted, then we know that form 1 is being submitted. Simple if statement with that logic did the trick!

Mitsue answered 28/9, 2015 at 21:38 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.