,

Comment ajouter un numéro de séquence dynamique à CF7

Comment ajouter un numéro de séquence dynamique à CF7

Contact Form 7 est l’une des extensions WordPress les plus populaires pour créer des formulaires. Elle est assez simple à mettre en oeuvre.

J’étais à la recherche de compléments pour cette extension et je suis tombé sur un article de Banna360 sur comment générer un numéro de séquence dynamique.

Cela permet d’avoir un numéro de référence pour retrouver un message venant d’un formulaire de support technique par exemple. Et du coup, j’ai mis cela en place sur un site d’un client avec comme référence ST0000[rand-generator].

Voici le code utilisé, il est assez simple :

function wpcf7_generate_rand_number( $wpcf7_data ) {
    $properties = $wpcf7_data->get_properties();
    $shortcode = '[rand-generator]';
    $mail = $properties['mail']['body'];
    $mail_2 = $properties['mail_2']['body'];
    
    if( preg_match( "/{$shortcode}/", $mail ) || preg_match( "/[{$shortcode}]/", $mail_2 ) ) {
        $option = 'wpcf7sg_' . $wpcf7_data->id();
        $sequence_number = (int)get_option( $option ) + 1;
        update_option( $option, $sequence_number );
        $properties['mail']['body'] = str_replace( $shortcode, $sequence_number, $mail );
        $properties['mail_2']['body'] = str_replace( $shortcode, $sequence_number, $mail_2 );
               
        $wpcf7_data->set_properties( $properties );
    }
}
add_action( 'wpcf7_before_send_mail', 'wpcf7_generate_rand_number' );

Mais il y a un hic… et oui !

Utilisé comme cela, si vous mettez le code court [rand-generator] dans le sujet des e-mails envoyés, cela ne fonctionnera pas. Pourtant, l’auteur du code spécifie bien qu’il peut l’être.

Alors comme d’habitude, j’ai creusé un peu le sujet et je vous livre le code complet qui permet aussi de mettre le code court dans le sujet de chaque e-mail ($mail et $mail_2) :

function wpcf7_generate_rand_number( $wpcf7_data ) {
    $properties = $wpcf7_data->get_properties();
    $shortcode = '[rand-generator]';
    $mail = $properties['mail']['body'];
    $mail_2 = $properties['mail_2']['body'];
    
    $subject = $properties['mail']['subject'];
    $subject2 = $properties['mail_2']['subject'];
    
    if( preg_match( "/{$shortcode}/", $mail ) || preg_match( "/[{$shortcode}]/", $mail_2 ) ) {
        $option = 'wpcf7sg_' . $wpcf7_data->id();
        $sequence_number = (int)get_option( $option ) + 1;
        update_option( $option, $sequence_number );
        $properties['mail']['body'] = str_replace( $shortcode, $sequence_number, $mail );
        $properties['mail_2']['body'] = str_replace( $shortcode, $sequence_number, $mail_2 );
        $properties['mail']['subject'] = str_replace( $shortcode, $sequence_number, $subject );
        $properties['mail_2']['subject'] = str_replace( $shortcode, $sequence_number, $subject2 );
        
        $wpcf7_data->set_properties( $properties );
    }
}
add_action( 'wpcf7_before_send_mail', 'wpcf7_generate_rand_number' );

Voilà, ce code devrait fonctionner à merveille, il suffit de le mettre dans votre fichier functions.php de votre thème.

 

0 réponses

Répondre

Se joindre à la discussion ?
Vous êtes libre de contribuer !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *