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

Astuces

wp_list_pluck : extraire une colonne d’un tableau d’objets sans boucle manuelle

Une WP_Query renvoie des objets complets, mais parfois seule une colonne intéresse le code appelant. Une seule fonction remplace le foreach devenu réflexe.

Par WordPress Développement • 11 avril 2020 • 3 min de lecture • Aucun commentaire
wp_list_pluck : extraire une colonne d'un tableau d'objets sans boucle manuelle

Comparons deux façons d’obtenir la liste des identifiants d’une collection d’articles issue d’une WP_Query. La première consiste à déclarer un tableau vide, boucler sur les résultats, et empiler chaque identifiant un par un. La seconde tient sur une seule ligne grâce à wp_list_pluck().

Cette fonction existe précisément pour ce genre de transformation, extrêmement fréquente dès qu’on manipule des résultats de requête : passer d’un tableau d’objets complets à un simple tableau d’une seule de leurs propriétés.

La méthode manuelle, et ses limites

$ids = array();
foreach ( $recents->posts as $post ) {
    $ids[] = $post->ID;
}

Trois lignes pour une opération aussi simple, et le code se répète à chaque fois qu’une autre colonne doit être extraite ailleurs dans le projet. Rien de faux dans cette approche, mais elle ajoute du bruit visuel à des fonctions qui gagneraient à rester courtes.

Ce que fait wp_list_pluck()

wp_list_pluck( $list, $field, $index_key = null ) accepte un tableau d’objets ou de tableaux associatifs, un nom de champ à extraire, et optionnellement un second champ à utiliser comme clé du tableau résultat.

L'essentiel à retenir : Extrait une colonne d'un tableau d'objets ou de tableaux ; Peut aussi indexer le résultat par une seconde colonne ; Remplace un foreach de trois lignes par un seul appel
$recents = new WP_Query( array( 'posts_per_page' => 10 ) );

$ids = wp_list_pluck( $recents->posts, 'ID' );
// array( 12, 45, 78, ... )

$titres_par_id = wp_list_pluck( $recents->posts, 'post_title', 'ID' );
// array( 12 => 'Titre A', 45 => 'Titre B', ... )

Le second exemple est particulièrement utile pour construire rapidement un tableau d’association identifiant vers titre, prêt à alimenter un champ select dans un formulaire d’administration.

Fonctionne aussi avec des tableaux imbriqués

Contrairement à ce qu’on pourrait croire, wp_list_pluck() n’est pas limitée aux objets stdClass ou WP_Post : elle fonctionne également sur des tableaux associatifs, et sait même descendre d’un niveau si le champ demandé est lui-même un tableau.

  • Sur un tableau d’objets WP_Term, elle extrait par exemple les noms via wp_list_pluck( $termes, 'name' ).
  • Sur un tableau associatif de métadonnées, elle fonctionne identiquement avec la clé correspondante.
  • Une clé absente sur certains éléments produit simplement une valeur null à cette position, sans erreur bloquante.

Un cousin utile : wp_list_filter

Dans la même famille de fonctions utilitaires, wp_list_filter() permet de filtrer un tableau d’objets selon des critères, avant d’y appliquer wp_list_pluck() pour n’en garder qu’une colonne. Les deux se combinent naturellement pour transformer un résultat de requête en quelques appels lisibles.

$publies = wp_list_filter( $recents->posts, array( 'post_status' => 'publish' ) );
$titres  = wp_list_pluck( $publies, 'post_title' );

Attention à l’ordre des paramètres

Une confusion fréquente porte sur l’ordre des arguments : le champ à extraire vient en second, la clé d’indexation en troisième. Inverser les deux ne provoque pas d’erreur PHP visible, mais produit un résultat silencieusement incorrect, difficile à repérer sans relire la documentation ou le code source de la fonction sur le Trac de WordPress.

Un repère simple : le troisième argument répond à la question « comment indexer le résultat ? », jamais « que veut-on extraire en plus ? ». Un seul champ est extrait à la fois.

En résumé

Dès qu’un tableau de résultats de requête doit être réduit à une seule colonne, wp_list_pluck() évite une boucle explicite et gagne en lisibilité. Combinée à wp_list_filter(), elle couvre une grande partie des transformations habituelles sur des collections d’objets WordPress, sans dépendance externe ni fonction PHP générique à réinventer.

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