web-dev-qa-db-fra.com

Formulaire de contact 7: utilisez le crochet créé à l'aide de wpcf7_before_send_mail pour un seul formulaire de contact par identifiant

Je travaille sur un site avec plusieurs formulaires créés à l'aide du formulaire de contact 7. Pour l'un de ces formulaires, je passe des variables que j'ai collectées à l'aide d'un champ de saisie masqué dans le formulaire. Je passe ces variables dans l'e-mail en utilisant le hook wpcf7_before_send_mail, mais ces valeurs passent dans chaque e-mail (j'ai ajouté des variables dynamiques ainsi que du texte statique) Voici le code:

add_action( 'wpcf7_before_send_mail', 'wpcf7_add_text_to_mail_body' );

 function wpcf7_add_text_to_mail_body($contact_form){
     $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 ) );

 }

J'essaie de comprendre comment transmettre uniquement ces valeurs à l'un des modèles d'e-mail du formulaire de contact, probablement via l'ID du formulaire.

12
ardev

Contact Form 7 utilise un type d'entrée masqué pour stocker l'identifiant du formulaire. Il utilise le nom de champ caché _ wpcf7. Vous pouvez obtenir l'ID de formulaire de cette façon.

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

Donc, votre code final devrait être

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;

}

J'espère que cela t'aides.

15
Dinesh Karki

J'utilisais la réponse de Dinesh, mais cela a cessé de fonctionner pour moi. Au lieu de cela, je vérifie maintenant un champ qui est unique au formulaire que je soumets:

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

Assurez-vous d'avoir au moins un nom de formulaire unique dans chacun de vos formulaires que vous pouvez utiliser pour ce faire. Il pourrait toujours être possible d'obtenir l'ID du formulaire à partir de $ contact_form via une fonction, mais cela a fonctionné et j'étais satisfait du résultat.

8
Jarom

Les méthodes de récupération de l'ID de formulaire et des champs soumis ont changé dans ce plugin depuis 2015.

Pour obtenir l'ID du formulaire, vous devez utiliser ceci:

$form_id = $contact_form->id();

Pour obtenir les données de soumission, vous devez utiliser ceci (au lieu de $ _POST):

$submission = WPCF7_Submission::get_instance();
$posted_data = $submission->get_posted_data();

Pour mettre tout cela ensemble, votre extrait ressemblerait à ceci:

add_action( 'wpcf7_before_send_mail', 'wpcf7_add_text_to_mail_body' );
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();
        $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 ) );
    }
}
2
Tessa