get_post_meta() #1 : La fonction de la semaine n°9

get_post_meta() #1 : La fonction de la semaine n°9

La loi des séries

Je vais faire une série d’article sur get_post_meta(), celui ci étant le premier.

C’est quoi une meta valeur ?

C’est une donnée additionnelle qui est liée à un post, elle peut être tout ce qui est imaginable.

A quoi ça sert ?

Cette fonction permet de récupérer des meta données d’un article ou tout autre type de contenu (CPT). Son utilisation est simple :

$meta_values va contenir la ou les meta valeurs.
$post_id est l’identifiant (un entier donc) de l’article duquel vous désirez obtenir les données.
$key est une chaà®ne de caractère qui est la clé de la meta valeur à récupérer.
$single est un booléan valant par défaut false qui indique si la valeur a récupérer est « seule » ou « accompagnée », c’est à dire si la valeur peut en fait être un tableau puisqu’il est possible d’ajouter plusieurs valeurs avec le même clé. Il n’y a pas de règle, c’est selon les besoins. Si vous savez que la valeur est unique, passez donc cela à vrai.

Utilisation simple

Une petite démo ?

Tous les articles contiennent cette meta valeur qui contient l’identifiant du dernier auteur l’ayant modifié.

La question du jour

Julien Maury m’a posé une question tout à l’heure :
question_jm
Voici ma réponse :
Non, la clé ne peut pas être un tableau, nous ne pouvez donc pas demander à WordPress quelques clés. Vous pourriez donc avoir un boucle for à faire afin d’aller chercher une par une les clés, c’est possible et ça reste optimisé car 1 ou 1000 appels à get_post_meta() ne prennent pas plus de requêtes, seul le premier appel fait 1 requête.

Mais alors comment ça marche ?

Et bien en fait le get_post_meta() va vérifier si vous en êtes au premier appel ou non, si oui, alors WordPress va faire ça :

Et il nous mets à en cache mémoire (pas besoin de plugin de cache comme WP-Rocket pour ça), les prochains appels iront taper direct en mémoire.

KEWAAA ?

Oui, un appel à get_post_meta() juste avec l’ID de l’article, c’est possible ! Et donc ça revoie TOUTES les clés de l’article. Non, ce n’est pas plus lourd que de préciser une clé, souvenez-vous WP va de toute façon tout charger et si vous avez spécifié une clé ne vous renverra que celle-ci.

Utilisation avancée

Pour réponse à la question de Julien avec du code, voilà ce qu’on peut faire très proprement :

function get_post_meta_keys( $post_id, $needed_keys, $single ) {


// on fait de suite un array_flip : on interverti les clés et les valeurs
// afin que nos valeurs deviennent des clés associatives dans mon tableau.
$needed_keys = array_flip( $needed_keys );

// La demande de toutes les clés à WordPress
$all_metas = get_post_meta( $post_id );

// On ne filtre que nos clés parmis les résultats avec un array_intersert_keys()
$my_metas = array_intersect_key( $all_metas, $needed_keys );

// Si les valeurs à récupérer sont "uniques" ($single = true ) on ajoute ça
// qui nous évite de devoir lire dans des tableaux
// voir https://21douze.fr/wp_list_pluck-fonction-semaine-7-7316.html

if ( $single ) {
$my_metas = wp_list_pluck( $my_metas, '0' );
}

return $my_metas;
}

//Utilisation (ID en dur pour la démo) :
$post_id = 99;

// on renseigne un tableau qui ne contient que le nom des clés à récupérer,
$needed_keys = array( '_cle_1', '_key_two', '_clef_alt' );

$my_values = get_post_meta_keys( $post_id, $needed_keys, true );

Grà¢ce à ça, je ne récupère que les valeurs des clés demandées sans problèmes !

Vous aimez ? Partagez !


Réagir à cet article

220 caractères maximum