Actualités WEB et WordPress, thèmes, plugins. Ici, nous partageons des conseils et les meilleures solutions de sites Web.

Créer du contenu par programme à partir des entrées de Gravity Forms

12

Cet article vous guidera dans la création de tout type de contenu (utilisateurs, publications ou autre chose personnalisée) basé sur les entrées d’un formulaire Gravity Forms. Nous ajouterons une zone dans l’écran des détails de l’entrée dans l’administration pour créer du contenu basé sur les informations soumises.

Ce que nous ferons

Nous allons créer une nouvelle métabox dans l’écran des détails d’entrée de Gravity Form. Dans cette métabox, nous ajouterons un bouton. L’idée est que l’utilisateur final peut revoir l’entrée et s’il approuve les détails de l’entrée, il peut appuyer sur le bouton pour déclencher la création de contenu.

Créer du contenu par programme à partir des entrées de Gravity Forms

Notre code sera déclenché en cliquant sur ce bouton, effectuera l’action nécessaire, et nous présenterons éventuellement un message du résultat à l’utilisateur final. Nous ajouterons également (éventuellement) des métadonnées à l’entrée afin de pouvoir vérifier facilement si du contenu a déjà été créé à partir de cette entrée ou non.

Je garderai le code assez simple et général afin que vous puissiez facilement le remplacer et le modifier pour l’adapter aux besoins de votre projet. Dans l’exemple ci-dessous, je suppose que nous voulons créer un utilisateur par programme. Mais ce que vous faites avec les détails de l’entrée dépend entièrement de vous ; vous pouvez créer un message, mettre à jour d’autres contenus ou envoyer un e-mail personnalisé si vous le souhaitez.

Identifier les champs

La première considération que nous devons faire est de savoir comment identifier les champs. En d’autres termes, nous devons savoir quel champ est quoi. Gardez à l’esprit que les valeurs d’une entrée dans Gravity Forms font référence à leurs ID de champ de formulaire. Et même avec un accès aux informations de chaque champ de formulaire, nous avons besoin d’un moyen infaillible pour savoir quels champs contiennent quelles informations. Un formulaire peut être composé de quatre entrées de texte – nous devons savoir lesquelles des quatre entrées de texte correspondent au prénom.

Vous avez quelques alternatives ici. Vous pouvez coder en dur les ID de champ (par exemple déterminer que l’ID de champ 2 est le nom de famille), mais cela est très sujet aux erreurs et n’est pas recommandé. Un moyen simple consiste à utiliser l’une des entrées d’informations de champ existantes dans Gravity Forms, par exemple le nom de la classe CSS. Mais gardez à l’esprit que l’utilisateur final peut fournir plusieurs noms de classe afin d’obtenir le style qu’il souhaite, et votre code peut facilement se casser si vous n’analysez pas correctement cette chaîne. La méthode que je recommande vivement consiste à ajouter vos propres entrées personnalisées aux champs :

Si vous voulez une méthode solide pour identifier les champs de votre code, vérifiez certainement comment dans le post ci-dessus. Mais pour rester simple dans cet article, j’utiliserai la classe CSS et supposerai que l’utilisateur n’entre rien d’autre que les valeurs dont nous avons besoin dans ce domaine.

Mise en place du formulaire

La première étape consiste naturellement à configurer le formulaire avec les champs et les types de champs dont vous avez besoin. Et puis vous insérez les identificateurs de champ aux bons endroits. A titre d’exemple j’ai ce formulaire :

Créer du contenu par programme à partir des entrées de Gravity Forms

Et pour chaque champ que je souhaite inclure, je fournis une classe CSS personnalisée que je peux cibler dans mon code. Par exemple pour le prénom ;

Créer du contenu par programme à partir des entrées de Gravity Forms

Passons maintenant au code et à la création d’une fonctionnalité qui convertit les soumissions en contenu personnalisé.

Ajout d’une métabox dans les détails de l’entrée

La première étape consiste à ajouter une sorte de déclencheur d’action pour créer notre contenu personnalisé. Un lieu naturel se trouve dans l’écran des détails de l’entrée. Cela permet à l’utilisateur final d’examiner les valeurs soumises, puis de décider de créer ou non du contenu à partir de celles-ci. Gravity Forms permet aux développeurs de créer facilement des métaboxes personnalisées dans ces écrans.

Pour créer une métabox personnalisée pour les détails d’entrée, nous pouvons utiliser le filtre gform_entry_detail_meta_boxes. C’est un filtre qui renvoie un tableau de toutes les métaboxes à afficher dans les détails de l’entrée. Nous ajoutons simplement un nouvel élément de tableau afin de créer une nouvelle métabox, et définissons une fonction de rappel pour restituer son contenu. Nous définissons un joli titre descriptif dans ‘ title‘ et définissons sa position pour qu’elle apparaisse dans le ‘ side‘.

Et puis nous devons définir la fonction de rappel: awp_gf_create_user_metabox_render()dans notre code. Cette fonction est responsable du rendu du contenu de la metabox. En tant que paramètre de cette fonction, nous obtenons un tableau d’arguments, dans lequel nous pouvons récupérer le formulaire et l’objet d’entrée ;

function awp_gf_create_user_metabox_render($args) { $form = $args['form']; // Form array. Here we find all the fields in $form['fields'] $entry = $args['entry']; // Entry array. Here we find all values in this current submission $render = ''; echo $render; }

Tout ce que nous avons à faire dans cette fonction est de créer du code HTML et de lui faire écho.

Quant à l’ajout d’un bouton pour déclencher une action, nous suivrons la même méthode que Gravity Forms lui-même. Il y a un élément de formulaire qui enveloppe tout l’écran des détails de l’entrée, et tout ce que nous avons à faire est d’ajouter un événement onclick sur un bouton d’envoi qui changera la actionpropriété ‘ ‘. Nous définissons notre propre nom d’action personnalisé, afin que nous sachions quand il a été déclenché – et qu’il n’entre pas en conflit avec les actions de Gravity Forms.

Appelons notre action personnalisée ‘ awp_gf_create_user‘ et rendons un bouton d’envoi avec un événement onclick comme ceci :

Avec le code ci-dessus, nous aurons une nouvelle métabox sur le côté de l’écran des détails de l’entrée, ressemblant à ceci :

Créer du contenu par programme à partir des entrées de Gravity Forms

Pour l’instant, rien ne se passe lorsque vous cliquez sur le bouton. C’est simplement parce que nous n’avons pas encore écrit de code pour l’écouter.

Extraction des valeurs de l’entrée

Comme mentionné précédemment, toutes les valeurs soumises dans le tableau d’entrée sont identifiées par leurs ID de champ.

Créer du contenu par programme à partir des entrées de Gravity Forms

Dans l’image ci-dessus, le champ ID 1 est pour le prénom, ID 2 est le nom de famille et ainsi de suite. Mais attendez – que se passe-t-il avec 5.1, 5.3 et ainsi de suite? Dans Gravity Forms, nous obtenons des "sous-ID" pour un champ spécial qui accepte plusieurs valeurs. J’ai ajouté un champ d’adresse à mon formulaire qui est un champ, mais plusieurs entrées. Chaque entrée dans ce champ obtient ses propres ID, ajoutés à l’ID principal et un point. Si vous n’utilisez aucun de ces champs à entrées multiples, tant mieux ! Le code devient très simple. Mais j’ai inclus ce champ spécial afin que nous puissions voir comment y accéder.

À l’heure actuelle, notre problème est que le code ne sait pas à quoi correspondent les champs ID 1, 2 ou 3. Cette information se trouve dans le tableau de formulaire, plus précisément l’ $form['fields']élément. Cet élément contient tous les champs du formulaire et nous avons un accès complet à chaque objet de champ. C’est ici que nous pouvons trouver notre méthode d’identification choisie; dans mon exemple cssClass.

Nous pouvons simplement parcourir ces champs et rechercher les identifiants que nous voulons extraire. Je vais mettre tous mes identifiants dans un tableau et nous pouvons simplement vérifier si un champ de la boucle en fait partie.

Mais nous devons d’abord savoir que le bouton a été cliqué. C’est assez simple; nous pouvons simplement vérifier si notre action personnalisée réside dans le $_POSTtableau. Mais parce que nous travaillons avec Gravity Forms, nous pouvons utiliser [rgpost](https://docs.gravityforms.com/rgpost/)(). La fonction Gravity Forms rgpost()renvoie simplement la valeur d’une requête POST. Vérification rgpost('awp_gf_create_user')et $_POST['awp_gf_create_user']est exactement le même. Mais nous utiliserons la fonction de Gravity Forms.

À la ligne, #8nous définissons un tableau avec tous les identifiants personnalisés que nous souhaitons rechercher. Ce sont toutes les valeurs que j’ai entrées comme classe CSS dans mon formulaire. Ensuite, dans la boucle pour chaque champ, nous vérifions si le champ est l’un de ces identifiants. Dans mon exemple, j’utilise la classe CSS pour identifier les champs, mais je recommande d’utiliser des entrées personnalisées. Ce code ne fonctionnera pas non plus si plusieurs classes CSS ont été données.

Ensuite, à la ligne, #12nous ajoutons un nouvel élément à notre tableau de valeurs final avec l’identifiant comme clé. Nous utilisons ensuite l’ID du champ et référençons le tableau d’entrée. À la fin de cette boucle $values, toutes les valeurs soumises pertinentes doivent être remplies. Tous les champs laissés vides ou non inclus dans le tableau d’identification seront exclus.

Si vous avez ajouté un champ de saisie multiple spécial, vous devrez ajouter du code supplémentaire pour référencer correctement les sous-ID. Je sais que awp_addressc’est un type de champ d’adresse. Les types de champs d’adresse dans Gravity Forms suivent un modèle fixe de sous-ID, et je n’ai activé que trois des entrées possibles (l’adresse de rue 1 a le sous-ID 1, le code postal a le sous-ID 3 et la ville a le sous-ID 5). Pour gérer ce genre de champs, nous devons faire quelque chose comme ceci :

À la ligne, #4je concatène toutes les valeurs afin que la chaîne finale soit un format d’adresse normalisé sur une ligne (",").

Nous avons maintenant toutes les valeurs nécessaires bien triées par clés d’identification dans le tableau $values. Ce que vous en faites dépend entièrement de vous et des besoins de votre projet. Mais je vais inclure un exemple de création d’un utilisateur dans WordPress.

Création d’un nouvel utilisateur à partir de la soumission d’une entrée

Pour garder mon code propre, j’appellerai une fonction distincte qui est responsable de la création d’un nouvel utilisateur. Tout ce dont j’ai besoin est de passer le tableau de valeurs. Je veux que cette fonction renvoie une sorte d’indication du résultat de cette action. De cette façon, je peux créer un message indiquant si l’utilisateur a été créé avec succès ou si un utilisateur avec l’e-mail fourni existe déjà.

Ensuite, nous définissons simplement la awp_gf_create_user()fonction. J’inclurai un exemple simple de création d’un utilisateur par programmation dans WordPress. Il s’agit simplement d’un exemple pour montrer comment utiliser les valeurs extraites.

Nous vérifions d’abord si un utilisateur avec l’e-mail donné existe avec [get_user_by](https://developer.wordpress.org/reference/functions/get_user_by/)(). Sinon, nous utilisons [wp_insert_user](https://developer.wordpress.org/reference/functions/wp_insert_user/)()pour ajouter un utilisateur. J’ai également inclus un exemple de stockage de méta utilisateur personnalisé (notre champ d’adresse). Enfin, notre méthode devrait renvoyer le résultat de la création de l’utilisateur. Si l’utilisateur existait déjà, nous renvoyons -1. Sinon, nous renvoyons l’ID utilisateur.

De retour dans notre rendu de métabox, nous pouvons maintenant ajouter conditionnellement un message à l’utilisateur final en fonction du résultat. Ceci est un exemple simple; si la valeur renvoyée était -1, un utilisateur avec l’e-mail fourni existe déjà. Et si la valeur renvoyée était supérieure à 0, nous savons qu’elle a créé un utilisateur avec succès. Ainsi, nous affichons un message indiquant que la création de l’utilisateur a réussi.

Éviter le contenu dupliqué

L’exemple simple ci-dessus désactivera par héritage la création de plusieurs utilisateurs à partir de la même entrée car il vérifie si oui ou non un utilisateur avec l’adresse e-mail fournie existe déjà. Mais dans d’autres cas, vous pourriez ne pas avoir cette opportunité. Ainsi, une autre stratégie pour éviter que les utilisateurs finaux ne créent du contenu en double à partir de la même entrée consiste à ajouter une méta d’entrée personnalisée. Autrement dit; si l’action a réussi, nous ajoutons une méta personnalisée à cette entrée. Et puis nous vérifions simplement si cette méta personnalisée existe avant de commencer l’action.

Gravity Forms propose des méthodes pour ajouter des méta personnalisées aux entrées ; [gform_add_meta](https://docs.gravityforms.com/gform_add_meta/)()ainsi que la récupération des valeurs : [gform_get_meta](https://docs.gravityforms.com/gform_get_meta/)().

À la ligne, #4nous récupérons notre méta d’entrée personnalisée. S’il existait (non vide), nous définissons un message informant l’utilisateur final qu’il a déjà essayé de créer du contenu à partir de cette entrée auparavant. Si la méta personnalisée n’existait pas, nous continuons alors à créer notre contenu. Lorsque le contenu a été créé avec succès, nous devons ajouter la méta personnalisée à l’entrée (ligne #10).

Conclusion et code final

Dans cet article, j’ai essayé de donner un exemple de la façon de créer du contenu à partir d’une entrée dans Gravity Forms. Les exemples de code sont destinés à vous donner une idée de la façon de le personnaliser et de le modifier pour l’adapter aux besoins de votre projet. Je recommande vivement d’étendre cette fonctionnalité pour mieux gérer les messages d’erreur. Vous pouvez également ajouter cette métabox uniquement pour un ou plusieurs formulaires spécifiques. Mais cela devrait être une bonne base sur laquelle s’appuyer.

Et voici le code final :

Source d’enregistrement: awhitepixel.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More