Lancement / Blog / Wordpress / Special mail-tags dans CF 7 en dehors du contenu du courrier

Special mail-tags dans CF 7 en dehors du contenu du courrier

Résumer avec ChatGPT

Contact Form 7 (CF7) fait partie des plugins de formulaire de contact les plus populaires pour WordPress. Il offre une multitude de fonctions, dont ce que l'on appelle des Tags de courrier spécifiques au courrier comme [_post_id], [_post_title] ou [_post_author_email].

Ces balises spéciales permettent d'obtenir facilement des informations sur le post dans lequel un formulaire est intégré. Mais que se passe-t-il lorsqu'un formulaire est intégré en dehors du contenu du message (par exemple dans une barre latérale ou un widget) ? C'est précisément là que se pose un problème.

Ohne Anpassungen würden Tags wie [_post_author_email] oder [_post_title] im Contact Form 7 Formular leer bleiben.

Pourquoi nous avions besoin de notre formulaire sidebar et l'avons optimisé

Lorsque nous avons introduit le formulaire de la barre latérale chez Konfuzio, nous voulions offrir aux lecteurs une possibilité plus simple et plus ciblée d'entrer en contact avec les auteurs de nos articles. Il était particulièrement important pour nous de rendre le processus efficace et sûr, tant pour les lecteurs que pour les auteurs. De là est née une tâche passionnante : comment intégrer de manière dynamique l'adresse électronique de l'auteur dans le formulaire sans la révéler publiquement dans le frontend ?

Pourquoi le formulaire est-il si important pour nous ?

  1. Contact direct avec l'auteur/interface de contact pour les lecteurs
    Les lecteurs ont souvent des questions spécifiques ou souhaitent approfondir le sujet traité dans l'article. Notre objectif était d'établir un pont direct avec les auteures du contenu par ce biais - non pas via un système de feedback anonyme, mais via un outil de communication ciblé et contextuel. Parallèlement, nous avons pu éviter que l'adresse e-mail de l'auteur n'apparaisse directement de manière visible dans le frontend, afin d'éviter les spams ou les abus.
  2. Un feedback ciblé pour une amélioration continue de la qualité
    Un bon feedback est essentiel pour créer et développer des contenus de qualité. Avec ce formulaire, nous donnons aux lecteurs la possibilité non seulement de poser des questions directes, mais aussi de donner leur avis sur nos contenus. Quels sont les sujets qui les préoccupent ? Où y a-t-il éventuellement des lacunes d'information ? Ce feedback est directement transmis à nos équipes de rédaction et d'écriture et permet d'améliorer les contenus à long terme.
  3. Déclencheurs pour l'édition et la mise à jour régulières des posts
    Un autre effet positif du formulaire est qu'il rappelle à nos auteurs de vérifier régulièrement leurs posts et d'ajouter en continu des informations actualisées. Un lecteur qui demande ou commente un post est un signe que le contenu reste pertinent pour notre groupe cible. Cela nous a suffisamment motivés pour travailler sur une solution robuste qui permettrait d'utiliser cette fonction sans restriction dans la sidebar.
  4. Éloge et récompense pour les auteurs engagés et les contenus de qualité
    Les contenus qui activent les lectrices et incitent à un échange direct avec les auteurs sont pour nous le signe que nous ne développons pas seulement des thèmes, mais que nous établissons des relations avec notre communauté. Donner à l'auteur(e) d'un post la possibilité d'être en contact avec des lecteurs motivés est une sorte de récompense pour les efforts fournis dans le contenu - une incitation à créer d'autres contenus de qualité.

Le défi technique

L'un de nos principaux obstacles était que Contact Form 7 n'avait pas, par défaut, de [_post_*]-lorsque les formulaires sont intégrés en dehors du contenu d'un message, comme dans notre cas, dans la barre latérale. Sans adaptation, des balises telles que [_post_author_email] ou [_post_title] restent vides.

Une solution sur mesure nous a permis de contourner ce problème. Grâce à l'intégration dynamique du Post-ID en tant que champ caché, nous avons pu remplir les balises côté serveur et récupérer toutes les informations contextuelles en toute sécurité. Grâce à cette solution, notre formulaire fonctionne désormais de manière fiable, même dans la sidebar, et nos lecteurs et auteurs bénéficient de la même manière d'un processus de feedback sans faille.

Fonctionnement des balises mail spécifiques au courrier

Lesdits [_post_*]-Les balises CF7 permettent d'intégrer automatiquement les données du post dans l'e-mail envoyé lors de l'envoi du formulaire.

Il s'agit notamment

  • [_post_id]: renvoie l'ID du post actuel.
  • [_post_name]: Le slug (nom) du post.
  • [_post_title]Le titre de chaque message.
  • [_post_url]: l'URL du post.
  • [_post_author]: le nom de l'auteur du post.
  • [_post_author_email]: L'adresse e-mail de l'auteur du post.

En théorie, ces balises sont un outil astucieux pour intégrer des contenus dynamiques en fonction des posts, sans avoir à créer manuellement à chaque fois un formulaire spécifique pour chaque post.

problème :

Ce [_post_*]-fonctionnent cependant seulementsi le formulaire fait partie du Contenu du courrier c'est-à-dire qu'il est intégré dans le domaine de contenu. En revanche, si le formulaire est placé dans le Barre latéraledans un widget ou un fichier de thème (par exemple single.php), ces balises spéciales vide. Cela est dû au fait que CF7 ne reconnaît pas automatiquement le contexte du post en dehors du contenu proprement dit.

Pourquoi ces problèmes surviennent-ils ?

Contact Form 7 dépend du fait que le formulaire soit rendu dans un environnement dans lequel la requête principale (Main Query) de WordPress définit correctement le post actuel. Cependant, si un formulaire est intégré dans une sidebar ou un widget, il n'y a pas de lien direct avec la Main Query. Dans ce cas, CF7 ne sait pas quel post est actuellement représenté et remplit la [_post_*]-Les balises de sécurité ne sont donc pas suffisantes.

Exemple : un formulaire dans la sidebar

Supposons que vous ayez publié un blog post avec l'identifiant 123 et un formulaire CF7 dans la sidebar. Le formulaire devrait en fait s'intituler My Blog Post et l'adresse e-mail de l'auteur du post. Toutefois, comme le formulaire est rendu en dehors du post, les balises telles que [_post_title] et [_post_author_email] vide.

Solution : reconnaissance dynamique du contexte du courrier

Pour résoudre ce problème, nous pouvons utiliser le Ajouter un contexte de courrier manuellement et côté serveurLes balises nécessaires fonctionnent dans tous les environnements, y compris dans la sidebar ou les widgets. Nous présentons ici une solution en deux étapes simples :

Étape 1 : ajouter le Post-ID comme champ caché

Tout d'abord, nous nous assurons que l'actuel ID postal est ajouté à chaque formulaire, indépendamment de l'endroit où il est intégré. Pour cela, nous utilisons le hook wpcf7_form_hidden_fieldspour afficher un champ caché contenant l'identifiant postal (post_id) dans le formulaire :

/**
 * Add the current post ID as a hidden field in CF7 forms.
 */
add_filter('wpcf7_form_hidden_fields', function ($hidden_fields) {
    if (is_singular()) {
        global $post;
        $post_id = get_queried_object_id() ?: ($post->ID ?? null);
        if ($post_id) {
            $hidden_fields['post_id'] = absint($post_id); // Ensure the post ID is valid and sanitized.
        }
    }
    return $hidden_fields; // Return the modified hidden fields.
});

Explication :

  • is_singular(): Vérifie si le post actuel est une page unique, un post unique ou un type de post personnalisé.
  • Le Post-ID est utilisé comme post_id dans le champ $_POST du formulaire et est donc disponible lors du traitement du formulaire.

Étape 2 : Traitement dynamique des _post_*-tags

Maintenant, nous allons mettre en œuvre un hook [_post_*]-lors du traitement du formulaire. Cette approche permet de vérifier s'il existe un identifiant postal et de récupérer dynamiquement les données correspondantes.

/**
 * Dynamically populate all _post_* tags using the post ID passed as a hidden field.
 */
add_filter('wpcf7_special_mail_tags', function ($output, $tag_name) {
    // Process only _post_* tags.
    if (preg_match('/^_post_(id|name|title|url|author|author_email)$/', $tag_name, $matches)) {
        // Retrieve the post_id from the hidden fields in the form submission (sent through POST).
        $post_id = isset($_POST['post_id']) ? absint($_POST['post_id']) : null;
        // If a valid post ID is available, resolve the tag dynamically.
        if ($post_id) {
            switch ($tag_name) {
                case '_post_id':
                    return $post_id;
                case '_post_name':
                    return get_post_field('post_name', $post_id); // Retrieve the post slug.
                case '_post_title':
                    return get_the_title($post_id);
                case '_post_url':
                    return get_permalink($post_id);
                case '_post_author':
                    $author_id = get_post_field('post_author', $post_id);
                    return get_the_author_meta('display_name', $author_id);
                case '_post_author_email':
                    $author_id = get_post_field('post_author', $post_id);
                    $author_email = get_the_author_meta('user_email', $author_id);
                    return !empty($author_email) ? esc_html($author_email) : 'fallback@example.com';
                default:
                    return $output;
            }
        }
        // Return an empty value if the post ID is not available.
        return '';
    }
    // Default output for tags not matching _post_*.
    return $output;
}, 10, 2);

Explication :

  • Grâce à l'intégration dans wpcf7_special_mail_tags nous pouvons traiter chaque jour individuellement.
  • Les données (_post_id, _post_author_emailetc.) sont côté serveur récupérées sur la base de l'identifiant postal.

Exemple d'application

  • Dans la sidebar :
    Liez le formulaire avec

    Erreur : Formulaire de contact non trouvé !

    dans la sidebar :
<aside>
    <?php echo do_shortcode('[contact-form-7 id="123"]'); ?>
</aside>
  • Paramètres de messagerie CF7 :
    Utilisez les _post_*-balises dans la configuration du courrier :
  Post ID: [_post_id]
  Post Name: [_post_name]
  Post Title: [_post_title]
  Post URL: [_post_url]
  Post Author: [_post_author]
  Post Author Email: [_post_author_email]

résultat :

Bien que le formulaire soit intégré dans la sidebar, les valeurs sont correctement complétées.

Conclusion

L'utilisation de balises mail spécifiques au courrier dans Contact Form 7 en dehors du contenu du courrier est problématique par défaut. Grâce aux adaptations décrites, nous pouvons garantir que toutes les données de courrier pertinentes sont également disponibles de manière fiable dans la sidebar ou les widgets. Cette solution est respectueuse de la protection des données, sûre et dynamique - et laisse la _post_*-Les balises de sécurité peuvent à nouveau fonctionner comme d'habitude.

Avez-vous trouvé cette page utile ?

Merci beaucoup pour vos commentaires !

Voulez-vous me donner un feedback ? (anonyme)

Nous développons des logiciels d'intelligence artificielle pour les entreprises et renonçons délibérément aux bannières publicitaires gênantes. Par le biais de nos articles, nous documentons des thèmes qui nous préoccupent, nous intéressent et financent également notre pain quotidien.

Comme nos contenus sont gratuits, vos commentaires sont nos félicitations.

Chaque auteur lit personnellement vos commentaires anonymes, même si les IA pourraient les automatiser, et intègre directement les suggestions constructives dans la prochaine révision ou les utilise comme source d'inspiration pour le prochain article.



    fr_FRFR