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.
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.
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.
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 ) );
}
}