L’extension Caldera Forms permet de créer des formulaires de contact sur un site WordPress via un système de glisser-déposer intuitif.
Je l’utilise sur tous mes sites, car côté utilisateur l’interface est plutôt facile à prendre en main, et côté développeur, elle propose une quantité importante de hooks et de filtres pour la personnaliser.
Parmi les fonctionnalités que l’extension propose, il y a bien sûr les traitements automatiques déclenchés à la soumission d’un formulaire, dont les réponses automatiques, ou auto responder :
Je vous partage aujourd’hui deux petites fonctions qui permettent d’ajouter une pièce jointe à ces réponses automatiques, elles sont à placer dans une extension ou votre thème enfant.
/**
* Ajout du fichier à la réponse automatique
*
*
* @param array $mail Message to send
*
*/
function add_file_autoresponse( $mail ) {
$attachment_id = 582;
$attachment_path = get_attached_file( $attachment_id );
if ( $attachment_path ) {
$mail[ 'attachments' ][] = $attachment_path;
}
return $mail;
}
Langage du code : PHP (php)
Cette première fonction ajoute le fichier au tableau $mail, dans les attachments.
Elle ne fait rien pour l’instant car à ce stade nous ne pouvons pas vérifier sur quel formulaire nous nous trouvons.
C’est la fonction suivante qui nous le permettra.
Pensez à remplacer la valeur de la variable $attachment_id par l’identifiant de votre fichier.
/**
* Vérifier le formulaire avant de procéder
*
*
* @param array $config Processor config
* @param array $form Form config
*/
add_filter( 'caldera_forms_autoresponse_config', 'check_formID_before_process', 10, 2 );
function check_formID_before_process( $config, $form ) {
// Remplacez l'ID du formulaire par le votre
if( 'CF5c5c377e2f1a0' == $form[ 'ID' ] ) {
add_filter( 'caldera_forms_autoresponse_mail', 'add_file_autoresponse', 10, 1 );
}
return $config;
}
Langage du code : PHP (php)
En nous positionnant sur le filtre caldera_forms_autoresponse_config, on peut vérifier l’identifiant du formulaire – pensez à l’adapter à votre cas -, et ajouter au filtre caldera_forms_autoresponse_mail notre première fonction.
Et voilà !
L’idéal serait d’ajouter un champs en back-office pour administrer le média lié, peut-être pour un second article 🙂
Crédit photo : EliFrancis – Pixabay
14 réponses à “Caldera Forms : ajouter une pièce jointe aux réponses automatiques”
Fantastic! Thank you very much for sharing this, I’m going to try and get it working!
…and it works! I had to think deep how to retrieve the post ID of an uploaded PDF, but when clicking « edit » in the media library, the post_ID is visible in the URL parameters. If you have more additions like this, keep me posted!
Bonjour Marie,
Merci pour le partage de ce script.
J’ai une question : comment procéder dans le cas de plusieurs formulaires (formulaire 1 = pièce jointe 1, formulaire 2 = pièce jointe 2, etc) ?
Merci,
Claude.
Bonjour Claude, il vous faudra dupliquer la fonction add_file_autoresponse pour chaque formulaire (add_file_autoresponse_FORMID), et au niveau de la fonction check_formID_before_process, faire une condition pour chaque ID de formulaire et appliquer la fonction correspondante :
if( ‘CF5c5c377e2f1a0’ == $form[ ‘ID’ ] ) {
add_filter( ‘caldera_forms_autoresponse_mail’, ‘add_file_autoresponse_CF5c5c377e2f1a0’, 10, 1 );
}
Un grand merci Marie,
Je vais tester ça.
Bonjour Marie,
Pour vous dire que tout fonctionne parfaitement.
Encore une fois, un grand merci !
Claude.
Bonjour et merci Marie pour cette astuce !
J’ai beau avoir suivi à la lettre les instructions, ça ne fonctionne pas chez moi !
Est-ce que ce code est toujours valable à ce jour ?
Bonjour Richard,
j’utilise toujours ce snippet et oui il fonctionne.
Merci pour cette réponse éclair 🙂
Nous sommes d’accord que ça ne nécessite pas forcément la version pro ?
Aurais-je oublié quelque chose ? (mon formulaire est en deux langues)
/**
* Ajout du fichier à la réponse automatique
*
*
* @param array $email_message Message to send
*
*/
function add_file_autoresponse_fr( $email_message ) {
// ID du fichier
$attachment_id = 1158;
$attachment_path = get_attached_file( $attachment_id );
if ( $attachment_path ) {
$email_message[ ‘attachment’ ][] = $attachment_path;
}
return $email_message;
}
function add_file_autoresponse_en( $email_message ) {
// ID du fichier
$attachment_id = 1157;
$attachment_path = get_attached_file( $attachment_id );
if ( $attachment_path ) {
$email_message[ ‘attachment’ ][] = $attachment_path;
}
return $email_message;
}
/**
* Vérifier le formulaire avant de procéder
*
*
* @param array $config Processor config
* @param array $form Form config
*/
add_filter( ‘caldera_forms_autoresponse_config’, ‘check_formID_before_process’, 10, 2 );
function check_formID_before_process( $config, $form ) {
// Formulaire FR
if( ‘CF602a72332af41’ == $form[ ‘ID’ ] ) {
add_filter( ‘caldera_forms_autoresponse_mail’, ‘add_file_autoresponse_fr’, 10, 1 );
}
// Formulaire EN
if( ‘CF602a71967e413’ == $form[ ‘ID’ ] ) {
add_filter( ‘caldera_forms_autoresponse_mail’, ‘add_file_autoresponse_en’, 10, 1 );
}
return $config;
}
J’avais remplacé « $email » par « $email_message » pour tester, mais ça ne fonctionne pas plus.
Je ne vois pas d’erreur à priori.
Dans les erreurs faciles à vérifier :
– où est placé le code ? est-il bien exécuté ?
– est-ce que les ID de formulaires sont bons ?
– est-ce que les ID d’attachments sont bons ?
Il faudrait vérifier cela en plaçant des
error_log( print_r( $variable ), true );
à plusieurs endroits dans les fonctions, afin de vérifier que le code est exécuté, que les valeurs sont correctes.Je vous recommande de lie l’article sur le débogage : https://fr.wordpress.org/support/article/debugging-in-wordpress/#wp_debug_log
Merci pour ces conseils, que je vais m’empresser d’appliquer !
Bonne journée 🙂
Hi There!
Great code, thanks!
I would like to place more than one Attachment in the same Response. Can somebody help me?
Thank you!
Daniel
Hi Daniel,
Something like this should work :
[pastacode lang= »php » manual= »function%20add_file_autoresponse(%20%24mail%20)%20%7B%0A%20%20%20%20%2F%2F%20multiple%20attachments%20ids%0A%09%24attachment_ids%20%3D%20%5B%20582%2C%20583%20%5D%3B%0A%20%20%20%20foreach(%20%24attachment_ids%20as%20%24attachment_id%20)%20%7B%0A%20%20%20%20%20%20%20%20if%20(%20get_attached_file(%20%24attachment_id%20)%20)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24mail%5B%20’attachments’%20%5D%5B%5D%20%3D%20get_attached_file(%20%24attachment_id%20)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%09return%20%24mail%3B%0A%7D » message= » » highlight= » » provider= »manual »/]