Le WordPress d'aujourd'hui, décodé pour les développeurs

Astuces

get_post_field pour lire un seul champ sans charger l’objet post complet

Charger un objet WP_Post entier pour ne lire qu'un titre coûte plus cher qu'il n'y paraît sur une liste longue. Une fonction dédiée règle ce déséquilibre.

Par WordPress Développement • 14 mai 2020 • 3 min de lecture • Aucun commentaire
get_post_field pour lire un seul champ sans charger l'objet post complet

Sur une archive qui affiche des centaines de lignes, chaque appel superflu s’additionne. Charger un objet WP_Post complet — avec son contenu, son extrait, ses métadonnées implicites — pour n’en lire que le titre est un gaspillage facile à éviter avec get_post_field().

Cette fonction native accepte un nom de champ de la table wp_posts et un identifiant d’article, et retourne uniquement la valeur demandée. Contrairement à get_the_title(), elle ne passe pas le résultat dans les filtres d’affichage habituels, ce qui la rend plus prévisible dans un contexte où le texte brut est nécessaire.

Quand la différence se voit

Dans une boucle qui construit un tableau de correspondance identifiant vers titre pour des centaines d’articles, appeler get_post() à chaque itération instancie un objet complet à chaque fois, même si une seule propriété est utilisée ensuite. get_post_field() évite cette charge en n’exposant que le champ demandé.

L'essentiel à retenir : Lit un champ précis sans instancier tout l'objet WP_Post ; S'appuie sur le cache d'objets déjà chargé pour éviter une requête ; Se distingue de get_the_title par son absence de filtres d'affichage
$titre = get_post_field( 'post_title', $id_article );
$statut = get_post_field( 'post_status', $id_article );
$auteur_id = get_post_field( 'post_author', $id_article );

Chacun de ces appels s’appuie en réalité sur le cache d’objets interne de WordPress : si l’article a déjà été chargé une fois dans la requête courante, aucune nouvelle requête SQL n’est déclenchée. Le gain réel dépend donc largement du contexte, mais l’appel reste toujours plus léger à écrire et à lire qu’un get_post() suivi d’un accès de propriété.

get_post_field face à get_the_title

FonctionPasse par les filtres d’affichageUsage typique
get_the_title()Oui (the_title, formatage)Affichage front-end classique
get_post_field( 'post_title', $id )NonComparaison, export, traitement interne

Cette absence de filtres est justement ce qui rend get_post_field() utile pour des traitements internes : comparer un titre brut à une valeur attendue dans un test, générer un export CSV, ou peupler un tableau de données destiné à un usage strictement interne où le HTML ajouté par certains filtres serait indésirable.

Un troisième paramètre souvent oublié

La fonction accepte un troisième argument, $context, qui contrôle l’échappement appliqué à la valeur retournée : raw, edit, db ou display. Par défaut, elle utilise le contexte display, qui applique déjà un échappement HTML de base sur certains champs.

  • Pour un traitement strictement interne (comparaison, log), le contexte raw évite tout échappement superflu.
  • Pour un affichage direct, le contexte par défaut suffit généralement.
  • Un champ inexistant sur le type de contenu demandé retourne une chaîne vide, jamais une erreur PHP.

Ne pas confondre avec wp_list_pluck

get_post_field() cible un seul article identifié par son identifiant, tandis que wp_list_pluck() traite un tableau entier de résultats déjà chargés. Les deux se complètent : la première est adaptée à un accès ponctuel, la seconde à une transformation en masse.

Un repère utile en revue de code : si la variable qui suit un get_post() n’est utilisée que pour lire une seule propriété, la ligne entière peut presque toujours être remplacée par un get_post_field() plus direct.

En résumé

Sur un site où les listes d’articles s’allongent avec le temps, remplacer les get_post() superflus par des get_post_field() ciblés est une optimisation à faible risque et à faible coût de mise en œuvre. Le gain n’est pas toujours spectaculaire isolément, mais il s’accumule sur les pages qui affichent le plus grand nombre de résultats.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi