Les posts wordpress sont pourvus d'un nombre bien déterminé d'attributs :
- titre
- contenu
- extrait
- date de publication
- status (brouillon, privé, publié...)
- permalien
- ...
C'est assez contraignant, selon ce qu'on fait de wordpress, on peut avoir besoin de champs supplémentaires. Voici quelques exemples qui nécessitent des champs additionnels :
- un champ nb_vues pour compter le nombre de fois qu' un article est affiché
- un champ image qui permettrait d'affecter à chaque post une image miniature qui serait utilisée dans les listing de posts (index, catégories)
On pourrait bien sûr modifier la structure de la table wp_posts pour ajouter ces attributs, mais c'est une mauvaise idée car on utiliserait alors une version modifiée de wordpress (donc impossibilité de mettre à jour, problèmes de compatibilité, bugs...).
Heureusement, Wordpress dispose d'une fonctionnalité permettant d'ajouter autant d'attributs que nécessaire à un article : les champs personnalisés (ou métas).
Dans ce chapitre, nous allons apprendre à utiliser les champs personnalisés, d'abord côté utilisateur, puis côté programmation.
Ajout de métas
Dans la partie administration de wordpress, allez sur la page d'édition d'un article. Si tout se passe bien, vous voyez le formulaire d'édition, qui vous permet de définir le titre et de saisir le contenu de l'article, et en dessous vous trouverez une zone intitulée Champs personnalisés.
N.B. Si ça n'est pas le cas, c'est que cette zone est masquée par wordpress, pour l'afficher il suffit de cliquer sur Options de l’écran en haut à droite de l'écran, puis de cocher la case Champs personnalisés.

Le principe des champs personnalisés est assez simple, un champ personnalisé est défini par deux choses :
- une clé (le nom du champ)
- une valeur
Reprenons notre exemple d'image miniature, on pourrait créer un champ personnalisé nommé image et ayant pour valeur l' URL de l'image miniature.
Faites donc ça, ajoutez ce champ personnalisé à un de vos posts :

Cliquez sur Ajouter un champ personnalisé, et votre champ personnalisé est ajouté !
Pour info, wordpress enregistre les champs personnalisés en base dans la table wp_postmeta, selon le modèle
entité attribut valeur, c'est grâce à ce modèle de données qu'on peut ajouter un nombre indéterminé d'attributs, sans modifier la structure des tables.
Utiliser les métas en PHP
Passons maintenant à l'aspect programmation des champs personnalisés. Car l'intérêt d'ajouter des métas à nos posts dans la partie administration, c'est de pouvoir les utiliser côté visiteur (front-office), dans les templates..
Pour cela, wordpress propose un certain nombre de fonctions qui permettent de lire et de modifier les métas :
- add_post_meta
- delete_post_meta
- get_post_custom
- get_post_custom_keys
- get_post_custom_values
- get_post_meta
- update_post_meta
Certaines d'entre elles ne peuvent être utilisées qu'à l'intérieur de la boucle.
Ici, nous allons simplement ajouter la miniature du post entre le titre et le contenu dans le listing (index.php).
Ouvez donc votre template index.php, et ajoutez ces 2 lignes de code entre le titre (the_title()) et le contenu (the_content()) :
<h1 class="storytitle"><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h1> <!-------------------------------------------------> <pre> <?php $exemple_metas = get_post_custom(); print_r( $exemple_metas ); ?> </pre> <!-------------------------------------------------> <?php the_content(); ?>
J'utilise la fonction get_post_custom() qui retourne un tableau de tous les champs personnalisés pour le post en cours (dans la boucle).
Maintenant allez voir sur la page d'accueil, vous verrez le contenu du tableau $exemple_metas :

On voit bien le champ personnalisé qu'on a ajouté dans la partie administration : image. Mais il y a également d'autres champs dont le nom commence par un underscore (_).
Ces champs sont utilisés par wordpress, ne vous en occupez pas.
Revenons à notre objectif : afficher l'image. Il suffit d'utiliser la balise <img> et l'url fournie par le tableau $exemple_metas :
<?php
$exemple_metas = get_post_custom();
if( isset($exemple_metas['image'][0]) ){
echo '<img src="'.$exemple_metas['image'][0].'" alt="" />';
}
?>
Voilà ce que ça donne à l'affichage en front :

Et voilà, vous savez maintenant utiliser les champs personnalisés.
Pensez à la sérialisation avec les fonctions php serialize() et unserialize() qui permettent de stocker des objets complexes (tableaux...) et donc non atomiques, en utilisant un seul champ personnalisé.













