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

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

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

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

Publié par : Marie Comet

Développeuse et intégratrice web indépendante, spécialisée WordPress.

Retrouvez-moi sur :

Répondre à Claudius Annuler la réponse

Vous pouvez utiliser les balises code (<code>your code</code>) ou pre (<pre>your code</pre>) pour formatter du code dans votre commentaire.

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.

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

  • Anton Theunissen

    Fantastic! Thank you very much for sharing this, I’m going to try and get it working!

    • Anton Theunissen

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

  • Claudius

    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.

    • Marie

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

      • Claudius

        Un grand merci Marie,
        Je vais tester ça.

      • Claude

        Bonjour Marie,

        Pour vous dire que tout fonctionne parfaitement.
        Encore une fois, un grand merci !
        Claude.

  • Richard

    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 ?

    • Marie

      Bonjour Richard,

      j’utilise toujours ce snippet et oui il fonctionne.

      • Richard

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

        • Richard

          J’avais remplacé « $email » par « $email_message » pour tester, mais ça ne fonctionne pas plus.

        • Marie Comet

          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

          • Richard

            Merci pour ces conseils, que je vais m’empresser d’appliquer !

            Bonne journée 🙂