Le WordPress d'aujourd'hui, décodé pour les développeurs

Extensions

Faire cohabiter WPForms et Meta Box sans saisir deux fois la même donnée

Une agence qui combine un formulaire WPForms et des champs Meta Box sur la même fiche voit vite apparaître des doublons de saisie. Voici la méthode qui les évite.

Par WordPress Développement • 13 juin 2023 • 5 min de lecture • Aucun commentaire
Faire cohabiter WPForms et Meta Box sans saisir deux fois la même donnée

Comment éviter qu’un même numéro de téléphone soit saisi une première fois dans un formulaire WPForms côté visiteur, puis une seconde fois manuellement par un administrateur dans un champ Meta Box de la fiche client correspondante ? C’est la situation rencontrée sur un site où une agence combine ces deux extensions : WPForms pour la collecte initiale, Meta Box pour la gestion enrichie des fiches côté back-office.

Sans synchronisation, chaque soumission de formulaire crée une entrée WPForms isolée, pendant que la fiche client, gérée avec ses champs Meta Box, reste vide tant qu’un administrateur ne recopie pas manuellement les informations. Ce cas décrit la mise en place d’un pont automatique entre les deux, sans double saisie.

Le contexte du cas

La fiche client est un type de contenu personnalisé fiche_client, avec des champs Meta Box classiques : téléphone, adresse, et un champ de sélection pour la source d’acquisition. Le formulaire WPForms de contact collecte nom, email et téléphone. L’objectif : que chaque soumission crée ou complète automatiquement la fiche correspondante, sans jamais écraser une donnée déjà enrichie manuellement par un commercial.

Le point d’entrée : wpforms_process_complete

L'essentiel à retenir : wpforms_process_complete comme unique point d'entrée après soumission ; Une clé de correspondance stable pour retrouver la fiche existante ; rwmb_meta pour lire ce que Meta Box a lui-même enregistré

WPForms déclenche l’action wpforms_process_complete juste après l’enregistrement d’une entrée, avec les champs soumis, les paramètres du formulaire et l’identifiant d’entrée. C’est le seul point d’entrée fiable, plutôt que d’intercepter un envoi d’email ou un hook plus générique :

add_action( 'wpforms_process_complete', function( $fields, $entry, $form_data, $entry_id ) {
    if ( 12 !== (int) $form_data['id'] ) {
        return;
    }

    $email     = sanitize_email( $fields[2]['value'] ?? '' );
    $telephone = sanitize_text_field( $fields[3]['value'] ?? '' );
    $nom       = sanitize_text_field( $fields[1]['value'] ?? '' );

    fiche_client_synchroniser( $email, $nom, $telephone );
}, 10, 4 );

Le filtrage sur l’identifiant du formulaire ($form_data['id']) évite qu’un autre formulaire WPForms du même site, sans rapport avec les fiches clients, ne déclenche cette synchronisation par erreur.

La clé de correspondance : l’email comme identifiant stable

Pour retrouver une fiche existante plutôt que d’en créer une nouvelle à chaque soumission, l’email sert de clé de correspondance, recherchée via une meta_query sur le champ Meta Box email :

function fiche_client_synchroniser( $email, $nom, $telephone ) {
    if ( empty( $email ) ) {
        return;
    }

    $existantes = get_posts( array(
        'post_type'   => 'fiche_client',
        'meta_key'    => 'email',
        'meta_value'  => $email,
        'numberposts' => 1,
    ) );

    if ( $existantes ) {
        $fiche_id = $existantes[0]->ID;
    } else {
        $fiche_id = wp_insert_post( array(
            'post_type'   => 'fiche_client',
            'post_title'  => $nom,
            'post_status' => 'publish',
        ) );
        update_post_meta( $fiche_id, 'email', $email );
    }

    // On ne complète le téléphone que s'il est vide : on ne remplace
    // jamais une valeur déjà enrichie manuellement par un commercial.
    if ( empty( rwmb_meta( 'telephone', array(), $fiche_id ) ) ) {
        update_post_meta( $fiche_id, 'telephone', $telephone );
    }
}

La fonction rwmb_meta(), fournie par Meta Box, lit la valeur actuelle du champ exactement comme l’affiche l’écran d’édition, y compris pour des champs à formatage particulier comme les champs de type groupe ou les champs répétables. C’est plus fiable que de relire directement get_post_meta() quand le champ Meta Box applique une transformation de valeur.

Ce que cette approche évite

Le point critique du dispositif est la condition empty( rwmb_meta( 'telephone', ... ) ) avant d’écrire : sans cette vérification, une nouvelle soumission WPForms écraserait un numéro de téléphone mis à jour manuellement par un commercial après un appel, ce qui aurait remplacé une donnée fraîche par une donnée potentiellement obsolète. Le principe retenu est simple : le formulaire complète les champs vides, il ne corrige jamais un champ déjà renseigné.

Étendre le principe à d’autres champs

Le même schéma s’applique à un champ Meta Box de type liste déroulante pour la source d’acquisition : si la fiche est créée par cette synchronisation, la source est renseignée automatiquement à « Formulaire site » ; si la fiche existait déjà avec une autre source enregistrée manuellement (salon, recommandation), elle reste inchangée. Cette règle de non-écrasement, appliquée systématiquement, évite d’avoir à documenter au cas par cas ce que la synchronisation a le droit de modifier.

Limite du dispositif

Cette méthode suppose que l’email transmis par le formulaire soit fiable et unique par client. Si deux personnes d’une même famille partagent une adresse email, les soumissions fusionneront sur la même fiche, ce qui peut être un comportement voulu ou non selon le métier concerné. Il est donc utile de documenter ce choix auprès de l’équipe qui exploite les fiches, plutôt que de le découvrir après plusieurs mois d’utilisation.

En résumé

Synchroniser WPForms et Meta Box ne demande ni plugin de pont ni développement lourd : un hook après soumission, une clé de correspondance stable et une règle stricte de non-écrasement des champs déjà renseignés suffisent à éliminer la double saisie, tout en respectant le travail déjà effectué manuellement sur chaque fiche.

Laisser un commentaire

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

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi