Créer un simple CRM dans WordPress Créer des champs personnalisés

Dans cette série, nous avons étudié comment créer un système CRM simple dans WordPress. Dans la première partie de cette série, nous avons créé un plugin WordPress qui enregistrait un type de publication personnalisé "Contacts", mais nous n'avons pas encore expliqué comment stocker des informations supplémentaires pour un contact..

Création de champs personnalisés

WordPress a le add_meta_box () fonction, qui permet aux développeurs de plugins et de thèmes d’enregistrer des méta-boîtes personnalisées sur différents écrans d’administration WordPress.

WordPress enregistre certaines de ses propres boîtes de méta à afficher lorsque vous créez un post ou une page. Par exemple, sur Pages, vous avez le Attributs de page meta box:

Ajoutons une boîte méta à notre Contacts type de message personnalisé. Ouvrez le fichier de plug-in que vous avez créé dans le premier tutoriel de cette série. Ensuite, dans le constructeur du plugin, mettez à jour le code pour qu'il corresponde à celui ci-dessous. Ceci enregistre notre register_meta_boxes () fonctionner contre le add_meta_boxes action:

/ ** * Constructeur. Appelé quand le plugin est initialisé * / function __construct () add_action ('init', array ($ this, 'register_custom_post_type')); add_action ('add_meta_boxes', tableau ($ this, 'register_meta_boxes')); 

Ensuite, dans notre register_meta_boxes () fonction, nous ajoutons un appel à add_meta_box (). Cela indique à WordPress que nous voulons une méta-boîte appelée Détails du contact, qui est rendu par notre output_meta_box () une fonction. Ajoutez le code ci-dessous après la fonction constructeur:

/ ** * Enregistre une méta-boîte sur notre type de message personnalisé, appelé 'Détails du contact' * / function register_meta_boxes () add_meta_box ('contact-details', 'Contact Details', array ($ this, 'output_meta_box'), «contact», «normal», «élevé»); 

Enfin, nous avons besoin d’un output_meta_box () fonction, appelée par add_meta_box au dessus de. Ajoutez le code ci-dessous après le register_meta_boxes () une fonction:

/ ** * Affiche une méta-boîte Détails de contact * * @ @param WP_Post $ post Objet WordPress Post * / function output_meta_box ($ post) 

Vérifions que nous avons une boîte méta apparaissant sur notre Contacts type de message personnalisé. Créez un nouveau contact dans le tableau de bord WordPress en allant à Contacts> Ajouter un nouveau.

Si tout a été écrit correctement, vous devriez voir quelque chose de similaire à la capture d'écran suivante:

Remplir la méta-boîte avec un champ

Continuons et ajoutons un champ d'adresse email à cette meta box. Change ton output_meta_box fonction au code ci-dessous:

/ ** * Affiche une méta-boîte Détails de contact * * @ @param WP_Post $ post Objet WordPress Post * / function output_meta_box ($ post) // Le label et le champ de sortie echo (''); écho ( '');  

Enregistrez votre code de plug-in et rechargez l'écran Add Contact. Vous devriez voir notre nouveau champ Adresse e-mail apparaître dans la boîte méta Détails du contact:

Enregistrement des données de champ personnalisées

Nous n'avons pas encore terminé. Nous devons dire à WordPress de sauvegarder le contenu saisi par un utilisateur dans ce champ. Dans WordPress, nous faisons cela en enregistrant une fonction sur le save_post action.

Comme pour la plupart des actions, nous allons enregistrer notre action dans le constructeur du plugin:

/ ** * Constructeur. Appelé quand le plugin est initialisé * / function __construct () add_action ('init', array ($ this, 'register_custom_post_type')); add_action ('add_meta_boxes', tableau ($ this, 'register_meta_boxes')); add_action ('save_post', array ($ this, 'save_meta_boxes')); 

Ensuite, créons notre save_meta_boxes () une fonction:

/ ** * Enregistre les données du champ de la boîte à méta * * * @param int $ post_id ID post * / function save_meta_boxes ($ post_id) // Cochez cette case si le type de poste personnalisé est Contact (= 'contact'! = $ _POST ['post_type ']) return $ post_id;  // Vérifiez que l'utilisateur connecté a l'autorisation de modifier ce message if (! Current_user_can ('edit_post', $ post_id)) return $ post_id;  // OK pour enregistrer les métadonnées $ email = sanitize_text_field ($ _POST ['contact_email']); update_post_meta ($ post_id, '_contact_email', $ email); 

Cette fonction effectue plusieurs actions, car le save_post action peut être appelée assez fréquemment par WordPress et d’autres plug-ins (par exemple, lorsqu’un enregistrement automatique d’un brouillon périodique ou lorsqu’un type de publication différent est enregistré). Nous devons veiller à ne sauvegarder nos données de champ personnalisées que si l'utilisateur a enregistré ou mis à jour un contact..

Si nous sauvegardons un contact, nous effaçons l'adresse e-mail. Du Codex WordPress:

Vérifie si UTF-8 est invalide, Convert single < characters to entity, strip all tags, remove line breaks, tabs and extra white space, strip octets.

En bref, nous nous assurons qu'il n'y a pas de formatage funky sur notre chaîne de texte.

Enfin, nous stockons l’adresse e-mail dans les métadonnées post, en utilisant update_post_meta. Post Meta est une série de paires clé / valeur associées à un post. Vous pouvez en avoir autant ou autant que vous le souhaitez. Dans notre exemple, nous stockons la valeur de notre champ personnalisé par rapport à la clé. _Email du contact.

Lecture des données de champ personnalisées

Créer un nouveau Contact et entrez une adresse email. Enregistrez le nouveau contact et vous remarquerez que l'adresse e-mail n'apparaît pas dans le champ:

Nous devons modifier notre output_meta_box () fonction pour lire la méta Post et l’afficher dans le champ de saisie. Changer la output_meta_box () fonction au code ci-dessous:

/ ** * Affiche une méta-boîte Détails du contact * * @param WP_Post $ post Objet WordPress Post * / function output_meta_box ($ post) $ email = get_post_meta ($ post-> ID, '_contact_email', true); // Label de sortie et écho de champ (''); écho ( '');  

Nous utilisons get_post_meta () pour obtenir la valeur pour la combinaison ID de message et méta-clé donnée. Nous savons que la méta-clé est _Email du contact, comme c'est ce que nous avons utilisé lorsque nous avons enregistré la valeur de champ personnalisé dans update_post_meta ()

Sécurité

La sécurité est extrêmement important lors de la soumission et du traitement des données de formulaire. Nous devons savoir que la source de nos données est fiable lors de la sauvegarde. Si nous ne pouvons pas faire confiance à la source de nos données, nous ne devons pas les stocker - les données peuvent être compromises ou corrompues de manière à exploiter et exploiter un bogue ou une faille de sécurité..

WordPress nous fournit des nonces (un «numéro utilisé une fois»), qui peuvent être envoyés avec les données du formulaire. Ce nonce peut être vérifié lors de l'exécution de notre routine de sauvegarde afin de s'assurer qu'elle correspond à la valeur attendue..

Cela permet d’éviter les attaques de type CSRF (falsification de requêtes inter-sites), c’est-à-dire si quelqu'un tente de soumettre des données de formulaire à notre routine de sauvegarde depuis un autre site Web.

Nous devons ajouter une sécurité au code ci-dessus à deux endroits:

  1. output_meta_box (): ajoute une valeur nonce au formulaire
  2. save_meta_boxes (): vérifier une valeur nonce soumise

Modifions le output_meta_box () fonction, en le remplaçant par le code ci-dessous:

/ ** * Affiche une méta-boîte Détails du contact * * @param WP_Post $ post Objet WordPress Post * / function output_meta_box ($ post) $ email = get_post_meta ($ post-> ID, '_contact_email', true); // Ajoute un champ nonce afin que nous puissions le vérifier plus tard. wp_nonce_field ('save_contact', 'contacts_nonce'); // Label de sortie et écho de champ (''); écho ( ''); 

Cette utilise wp_nonce_field (), générer un champ caché appelé contacts_nonce, avec une action appelée save_contact. Sa valeur est générée par WordPress.

Ensuite, éditons la routine de sauvegarde dans save_meta_boxes ():

/ ** * Enregistre les données du champ de la boîte à méta * * * @param int $ post_id ID post * / function save_meta_boxes ($ post_id) // Vérifie si notre nonce est défini. if (! isset ($ _POST ['contacts_nonce']))) return $ post_id;  // Vérifiez que le nonce est valide. if (! wp_verify_nonce ($ _POST ['contacts_nonce'], 'save_contact')) return $ post_id;  // Vérifiez qu'il s'agit du type de message personnalisé du contact if ('contact'! = $ _POST ['post_type']) return $ post_id;  // Vérifiez que l'utilisateur connecté a l'autorisation de modifier ce message if (! Current_user_can ('edit_post', $ post_id)) return $ post_id;  // OK pour enregistrer les métadonnées $ email = sanitize_text_field ($ _POST ['contact_email']); update_post_meta ($ post_id, '_contact_email', $ email); 

Cela ajoute deux contrôles à notre routine de sauvegarde:

  1. Vérifiez qu'un champ nonce a été défini dans notre formulaire. Sinon, ne sauvez rien.
  2. Vérifiez que la valeur du champ nonce correspond à ce que nous attendons. Sinon, ne sauvez rien.

Créez ou éditez votre Contact, et assurez-vous que l'adresse e-mail est maintenant enregistrée.

Suivant…

Dans le prochain article, nous allons utiliser les champs personnalisés avancés pour ajouter des champs personnalisés à nos Contact type de post personnalisé, nous permettant de créer une interface utilisateur riche avec un plus grand nombre de types de saisie.