WordPress | ACF PRO & Contact form 7 Create an event subscription form

November 14th, 2018

A customer ask me to create, under his wordpress website, an Events Subscribe Form, at the moment, the events, are a custom post type with some acf fields associated.
Basically he wants to have the ability to add a maximum number of users that can register to the event.
When a user subscribe to the event, if there is disponibility of places, he ‘ll recive a mail with the payment datas, otherwise, he’ll recive a mail that inform him that there isn’t more disponibility of places.

First of all create 2 custom fields associated with the custom post type “Event”:
1° field : Label:disponibility Name:disponibility Type:number
2° field: Label:subscriber number Name:subscribe_number Type:number Default: 0

Second create a Form in “Contact form 7” open the “single-events.php” from you theme, and where you want the subscribe form appears add:

<?php echo do_shortcode( '[contact-form-7 id="144" title="Subscribe Events Module"]' ); ?>

Change “id=” and “title=” with the one from your form.

Next, open the function.php from your theme and add:

add_action("wpcf7_before_send_mail", "wpcf7_do_something");

Basically this action performed when the mail is actually sent by CF7, now we have to create the “wp7_do_domething” function:

function wpcf7_do_something($WPCF7_ContactForm)
{
//Get current form
        $wpcf7      = WPCF7_ContactForm::get_current();

        // get current SUBMISSION instance
        $submission = WPCF7_Submission::get_instance();

        $val_posti = $your_postid;
if ($submission) {

            // get submission data
            $data = $submission->get_posted_data();

            // nothing's here... do nothing...
            if (empty($data))
                return;

            // extract posted data for example to get name and change it
            $name = isset($data['your-name']) ? $data['your-name'] : "";

            // do some replacements in the cf7 email body
            $mail = $wpcf7->prop('mail');

            // with $data['my-filed-name'] we extract the post/page id
            $posti_dis = (int) get_field('disponibilita',$data['my-filed-name']); //number of places ( from custom field associated with the custom post type )
            $n_iscritti = (int) get_field('numero_iscritti',$data['my-filed-name']); //number of subscribers ( from custom field associated with the custom post type )
            $post_riamanenti = $posti_dis - $n_iscritti; // Number of free places

            if(($posti_dis - $n_iscritti)>0){ // if (number of subscribers < number of places )
              $mail[ 'subject' ] .= ' - Posti Disponibili';
              
                            $mail2 = $wpcf7->prop('mail_2');
                            $mail2['body'] = ' Buongiorno.<br/>Abbiamo ricevuto la sua richiesta di iscrizione.<br/>A breve invieremo una email di conferma di iscrizione con i dettagli dell&rsquo;evento..<br/><br/>Qualora voglia partecipare anche alla cena conviviale, per perfezionare l&#39;iscrizione, la invitiamo ad <br/> inviare la copia del bonifico all&#39;indirizzo email <br><a href="eventi@ugdcecmonzabrianza.it">eventi@ugdcecmonzabrianza.it</a><br/>Il bonifico dovrà essere eseguito sulle coordinate Cordiali saluti.<br/>UGDCEC Monza e Brianza';
                            
                            // Save the email body
                            $wpcf7->set_properties(array("mail" => $mail,"mail_2" => $mail2));

                            $n_iscritti++; // Increment the number of subscribers
                            update_field('numero_iscritti', $n_iscritti, $data['my-filed-name']); // Save the value in the relative custom fields
                            
                            return $wpcf7;

            }else{ // if (number of subscribers >= number of places )
              $mail[ 'subject' ] .= ' - Posti non Disponibili';

              $mail2 = $wpcf7->prop('mail_2');
              $mail2['body'] = 'Buongiorno.<br/>Abbiamo ricevuto la sua richiesta di iscrizione.<br/>Al momento abbiamo superato il numero di posti disponibili.<br/><br/>Le comunicheremo a breve se è possibile confermare comunque la sua richiesta. <br/><br/><br/>Cordiali saluti <br/> UGDCEC Monza e Brianza <br><a href="eventi@ugdcecmonzabrianza.it">eventi@ugdcecmonzabrianza.it</a>';
              
              // Save the email body
              $wpcf7->set_properties(array("mail" => $mail,"mail_2" => $mail2));
              
              return $wpcf7;

            }
            // Save the email body
            $wpcf7->set_properties(array(
                "mail" => $mail
            ));
            return $wpcf7;
        }
    
}

For test it, navigate to post type, create new event, insert the number of “disponibility” in disponibility field ( the “subscriber” field must be 0 ).
Now try to overcome the disponibility limit, and you see that the email changes.

Tha’ all
Good luck !!!