< Retour au blog

Caldera Forms : ajouter une pièce jointe aux réponses automatiques

Publié le

dans la catégorie


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 :

Panneau de configuration des traitements automatiques
Panneau de configuration des traitements automatiques

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”

    • …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!

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

  2. 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 ?

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

    • 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 »/]

Répondre à Richard Annuler la réponse

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.