# 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.

- Auteur : WordPress Développement
- Publié le : 2020-04-11
- Mis à jour le : 2020-04-11
- Catégorie : Astuces
- URL : https://www.wpmoderne.fr/tips/wp-list-pluck-extraire-colonne-tableau-objets/

## L’essentiel

- 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

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.
