Comment créer et utiliser des champs personnalisés WordPress • WPShout

By | juillet 25, 2019

WordPress pas cher

Cet article explique comment utiliser les champs personnalisés WordPress, également appelés post meta. Nous y décrivons comment utiliser les fonctions post-méta PHP de WordPress, en particulier get_post_meta () et update_post_meta ()et fournit des démonstrations de code détaillées ainsi que des conseils pratiques pour travailler avec des outils de champs personnalisés tels que Pods et Advanced Custom Fields.

Cette discussion sur les champs personnalisés WordPress est un chapitre de notre remarquable cours WordPress, Opérationnel. Si vous souhaitez devenir un développeur WordPress averti, Opérationnel est votre meilleure et la plus claire voie pour y arriver.

La meilleure façon d'apprendre le développement WordPress

Opérationnel est notre cours complet "apprendre le développement WordPress". Maintenant dans sa troisième édition mise à jour et étendue, il a aidé des centaines d'acheteurs heureux à apprendre le développement WordPress de manière rapide, intelligente et complète.

Voici ce que l'un d'entre eux avait à dire:

"Je pense que toute personne intéressée par l'apprentissage du développement WordPress A BESOIN de ce cours. Regarder les vidéos était comme un groupe de lumières allumées." -Jason, développeur WordPress

Cet article fait également partie d'une série plus vaste et gratuite sur les champs personnalisés WordPress (post méta) et les taxonomies personnalisées. Si vous souhaitez savoir quels champs personnalisés sontet que vous souhaitiez ajouter un élément de publication meta ou créer une taxonomie personnalisée, jetez un oeil à cette série d'articles.

Maintenant, lisez la suite. 🙂


Points à retenir:

  • Les données de champ personnalisées peuvent être ajoutées à une publication dans la section «Champs personnalisés» de l'éditeur de publication ou à l'aide d'un programme. update_post_meta (). update_post_meta () est également la fonction de changement valeur d’un champ personnalisé pour un article spécifique.
  • Une fois stockées, les données de champ personnalisées sont accessibles à l'aide de get_post_meta (). Cette fonction nécessite toujours un identifiant de poste. dans The Loop, vous pouvez trouver cet identifiant avec get_the_ID ()mais en dehors de celle-ci, vous devrez utiliser d'autres méthodes.
  • La dernière fonction remarquable pour utiliser des données de champ personnalisées est delete_post_meta (), qui détruit les données d’un champ personnalisé donné pour une publication donnée.
  • Créer des interfaces utilisateur attrayantes pour permettre aux utilisateurs de saisir et de modifier des champs personnalisés est une tâche ardue et fastidieuse dans WordPress. Il existe plusieurs bons plugins et projets pour résoudre le problème, et il vaut la peine de les utiliser avant de tenter le processus à la main.

Dans ce chapitre, nous verrons comment ajouter des données de champs personnalisés, à la fois à partir de l'interface d'administration WordPress et par programme, et comment utiliser, modifier et supprimer ces données.

Comment fonctionnent les champs personnalisés

Les champs personnalisés sont stockés dans la base de données WordPress wp_postmeta table (notez que wp_ peut être changé en un autre préfixe de base de données), et ressemble à ceci:

Comme vous pouvez le constater, les champs personnalisés sont de simples paires clé / valeur: elles mappent un nom de champ personnalisé (meta_key) à une valeur de champ personnalisée (meta_value) pour un poste particulier (post_id). La seule donnée qu'un champ personnalisé possède au-delà de ces trois éléments est un identifiant unique (meta_id).

Une fois stockées, les données de champ personnalisées peuvent être récupérées et utilisées, modifiées et supprimées à l'aide de plusieurs fonctions WordPress simples.

Ajout de données de champ personnalisées à une publication

Ci-dessous, l'interface par défaut pour l'ajout manuel de données de champ personnalisées à une publication:

Par rapport à la plupart des interfaces, celle-ci est assez peu attrayante et difficile à utiliser; nous donnerons des conseils pour la création de nouvelles interfaces ci-dessous.

Utilisation de données de champ personnalisées

La fonction la plus utile de WordPress pour accéder aux données de champ personnalisées d’une publication est appelée get_post_meta (). (D'autres existent, y compris the_meta () et get_post_custom (), mais les deux se comportent assez étrangement pour être omis.) Pour voir comment get_post_meta () fonctionne, examinons-le dans quelques environnements.

Dans la boucle

Essayons d’abord get_post_meta () à l'intérieur de la boucle:

<? php
/ *
Nom du plugin: WPShout Ajouter une saveur préférée au contenu
* /

fonction wpshout_favorite_flavor_subtitle ($ content) 
$ fave_flave = get_post_meta (get_the_ID (), 'wpshout_current_favorite_flavor', true);

if (vide ($ fave_flave)) 
retourne $ contenu;


$ fave_flave_string = 'Mon goût actuel préféré est: '. $ fave_flave. '
'; return $ fave_flave_string. $ contenu; add_filter ('the_content', 'wpshout_favorite_flavor_subtitle');

Sur le message dont nous avons défini le champ personnalisé dans la capture d'écran ci-dessus, nous obtenons le résultat suivant:

En boucle dans un plugin?

Tout d’abord: comment pouvons-nous être dans The Loop si nous écrivons un plugin? C'est un point important.

La réponse est que nous avons accroché dans le contenu, un crochet de filtre qui prend place à l'intérieur de la boucle. le le contenu le crochet est déclenché juste avant la le contenu() ou the_excerpt () Les étiquettes de filtre s'exécutent.

Revenons donc à notre analogie d’usine: en s’accrochant à le contenu, nous avons été tirés dans le section de l'usine c'est en cours d'exécution The Loop. Si nous étions branchés ailleurs – disons, body_class, qui est notre prochain exemple – le code ci-dessus n’aurait pas fonctionné.

get_post_meta () Arguments

get_post_meta () accepte trois arguments:

  1. Une identification de poste. Ceci est requis pour tous les appels de get_post_meta (). Dans l’exemple ci-dessus, puisque nous sommes dans The Loop, nous pouvons utiliser le get_the_ID () balise de modèle, qui obtient le actuel les données de la poste automatiquement.
  2. Une clé de champ personnalisée. Nous avons défini cette clé nous-mêmes –wpshout_current_favorite_flavor– dans la zone "Champs personnalisés" de notre message. Cet argument est optionnel. si vous ne le remplissez pas, vous obtiendrez un tableau associatif de tout les champs personnalisés de la poste.
  3. Si nous souhaitons que notre valeur de champ personnalisé soit une chaîne. Si nous mettons à vrai, comme nous l’avons fait ici, nous obtenons une ficelle; si on le laisse ou le met à faux, nous allons récupérer un tableau. Pour que les choses restent simples ici (et la plupart du temps), il faut vrai.

if (vide ($ fave_flave))

Cette section de code "se ferme tôt" si la méta de publication que nous essayons d'extraire n'a pas de valeur, de sorte que nous ne finissons pas par modifier les publications qui ne possèdent pas ce champ personnalisé.

Nous vérifions si $ fave_flave est vide, car si le champ personnalisé est manquant, get_post_meta () revenirs une chaîne vide. Nous vérifions donc si nous avons bien récupéré une valeur ou juste une chaîne vide. (Notez que si get_post_meta ()Le troisième argument est omis ou réglé sur faux, il revenirs un vide tableau au lieu.)

Parce que nous sommes accrochés à le contenu-utilisant un filtre—Nous devons rendre ce que nous avons reçu, c’est pourquoi nous retourne $ contenu inaltéré.

$ fave_flave_string =

Depuis que nous connaissons notre $ fave_flave existe une variable, nous construisons une chaîne en utilisant cette variable.

return $ fave_flave_string. $ contenu;

Cela ajoute notre chaîne créée avant la chaîne de contenu principale de la publication, et revenirs le contenu modifié pour que WordPress fonctionne.

add_filter ('the_content', 'wpshout_favorite_flavor_subtitle');

Nous avons accroché dans le contenu, qui s'exécute juste avant que le contenu principal d'un article soit imprimé sur la page. Étaient accrocher notre propre fonction, wpshout_favorite_flavor_subtitle (), de sorte qu'il s'exécute, en exécutant le code qu'il contient, lors du lancement de WordPress le contenu. Comme tous les filtres passent un argument à leurs fonctions accrochées, notez que wpshout_favorite_flavor_subtitle () a un argument, $ contenu, lequel est revenu si elle est modifiée ou non.

En dehors de la boucle

Voici l’utilisation d’un champ personnalisé en dehors de The Loop. C’est basé sur ce champ personnalisé dans un message:

Selon le code ci-dessous, nous allons ajouter la classe personnalisée que nous avons définie, .kitties-class, à notre article HTML corps élément. (Nous avons stylé .kitties-class pour effet!) Le résultat final ressemblera à:

Et voici le code:

ID, 'wpshout_custom_body_class', true);

if (vide ($ custom_body_class)) 
retourne $ classes;


$ classes[] = $ custom_body_class;
retourne $ classes;

add_filter ('body_class', 'wpshout_add_custom_body_class');

Passons en revue les bits du code qui sont nouveaux. Nous ignorerons les quelques bits très similaires au dernier exemple.

if (! is_singular)

Parce que ce code change le classe entière de la page Web, nous ne souhaitons pas l’exécution simultanée de plusieurs publications. En d'autres termes, cela n'a de sens qu'en tant qu'approche sur des pages Web singulières. Ce code "se ferme tôt" si le paquet de messages contient plus d'un message. Pour plus sur les conditionnels comme is_singular (), voir Tags conditionnels de WordPress.

Global $ post

Cette ligne est très importante. global signifie «flottant dans l’état global de WordPress», qui correspond à l’ensemble des variables et des objets qui existent à l’arrière-plan des processus WordPress et qui indiquent à WordPress «ce qui se passe». global $ post; nous permet d'accéder à la $ post variable globale localement, dans la fonction actuelle, par le nom $ post.

Quel est $ post? C’est un gros objet PHP, assis dans l’état global de WordPress, avec beaucoup d’informations sur le poste actuel. Nous devons parler à $ post car nous avons besoin de connaître le poste actuel ID pouvoir courir get_post_meta ().

C’est un sujet délicat: cela rentre dans la syntaxe des objets PHP et beaucoup sur l’état global. Penser à $ post en tant que source directe d’informations sur la publication actuelle utilisée par WordPress pour créer la page Web.

$ post-> ID

Cela vient tout droit de la ligne précédente. Nous voulons l’identité de la publication. Sans elle, nous ne pouvons pas courir. get_post_meta ()—Et nous n’avons pas accès à notre pratique get_the_ID () balise de modèle puisque nous sommes en dehors de The Loop.

Le moyen de demander un objet comme $ post pour l'une de ses propriétés est avec la syntaxe d'objet PHP: dans ce cas, $ post-> ID. Ce que ce code nous renvoie, c’est l’ID du poste actuel (qui est aussi le seulement poste qui a été récupéré pour le chargement de cette page, car nous savons que ceci est une page singulière).

$ classes[] = $ custom_body_class;

L’événement auquel nous avons accroché, body_class, nous transmet une variable, $ classes, travailler avec. $ classes est un tableau classes que WordPress envisage déjà d’ajouter à la page Web. étiquette. Cela ressemble à quelque chose comme ça: tableau ('single', 'single-post', 'postid-2196', 'single-format-standard', 'connecté', 'admin-bar').

Parler à des tableaux est différent de parler à d'autres types de données, comme des chaînes. Dans ce cas veux ajouter un élément au $ classes tableau, et la syntaxe PHP pour ajouter un seul élément à un tableau est la suivante: $ nom_rayon[] = $ thing_to_add;.

Avec notre nouvel élément de tableau ajouté à la $ classes tableau, tout ce qui reste est de passer la modification $ classes retour pour un traitement ultérieur. Nous faisons cela avec retourne $ classes;.

add_filter ('body_class', 'wpshout_add_custom_body_class');

Cette fois, nous sommes accrochés à body_class, un événement qui se déclenche bien avant que The Loop ne se déroule. C’est pourquoi nous avons dû utiliser Global $ post au dessus de. Quand on accroche body_class, il nous donne notre $ classes tableau pour modifier et redonner, tout comme le le contenu le filtre nous donne une $ contenu chaîne. (Au fait, $ classes et $ contenu Ce sont des noms de variables que nous décidons nous-mêmes, mais ce sont des noms très intelligents, car ils décrivent ce qu’ils contiennent.)

Ajout, modification et suppression de champs personnalisés par programme

Jusqu’ici, nous n’avons traité que de la récupérer données de champs personnalisés. Une autre tâche courante pour les développeurs consiste à modifier ou à supprimer ces données par programmation. Les fonctions pour cela sont assez simples:

update_post_meta ()

C'est la fonction pour ajouter ou mettre à jour une valeur de champ personnalisé particulière à une publication. Il se présente comme suit:

update_post_meta ($ post_id, $ meta_key, $ meta_value, $ prev_value);

Ses arguments, dans l'ordre, sont les suivants:

  1. $ post_id: ID du poste à affecter
  2. $ meta_key: Le nom du champ personnalisé à affecter (pour l'exemple le plus récent, ce serait 'wpshout_custom_body_class')
  3. $ meta_value: Valeur que le champ personnalisé doit maintenant prendre. Il peut s'agir d'une chaîne, d'un entier, d'un tableau ou de tout autre type de données, en fonction de vos besoins.
  4. $ prev_value: Ce paramètre facultatif gère les clés méta en double; vous pouvez presque toujours l'omettre

WordPress propose également une fonction similaire appelée add_post_meta (), mais update_post_meta () est meilleur dans la plupart des situations, car il sera soit ajouter le champ personnalisé s'il est nouveau ou mettre à jour si ce n’est pas le cas.

delete_post_meta ()

delete_post_meta () supprime entièrement un champ personnalisé pour un message. Il se présente comme suit:

Aussi étrange que soit ce plugin, rien ne devrait vous surprendre si vous avez suivi la suite de ce chapitre.

L’interface utilisateur des champs personnalisés par défaut de WordPress est peu attrayante et difficile à utiliser. Malheureusement, le logiciel de base de WordPress n’expose pas une API permettant de créer une interface attrayante. Il est donc fastidieux de le faire à la main.

Pour plus de contrôle qu'un plugin de champs personnalisés, nous recommandons CMB2, à l'adresse https://wordpress.org/plugins/cmb2/. Une fois que vous avez chargé les fichiers du projet, vous transmettez un seul grand tableau de configuration à un événement personnalisé qu’il enregistre. Cela simplifie grandement la création d'interfaces de champ personnalisées attrayantes.

Les champs personnalisés sont un moyen crucial d’étendre WordPress au-delà de son rôle par défaut en tant que moteur de publication d’articles. Vous devez maintenant comprendre la nature des champs personnalisés en tant que magasin de clés / valeurs pour les données de niveau postérieur et savoir comment stocker, modifier et accéder aux données de champs personnalisés.