Extraire des valeurs d’un tableau avec wp_list_pluck()

Lorsque l’on travaille avec des tableaux de tableaux en PHP, il peut être utile de récupérer les valeurs d’un champ/propriété de chaque élément du tableau.

Comment utiliser wp_list_pluck() ?

Je m’explique :

  • dans un tableau listant des personnes, on veut un nouveau tableau pour avoir tous les âges de ces personnes,
  • dans un tableau listant des WP_Post, on souhaite récupérer tous les titres des articles.

C’est là que la fonction wp_list_pluck() prend tout son sens. Elle permet d’extraire un champ spécifique de chaque objet ou tableau d’un tableau. Elle fonctionne exactement comme la fonction array_column() de PHP 5.5+, à la seule différence près qu’on pourra récupérer un champ sur un tableau contenant des objets.

Comment récupérer les titres d’un tableau d’articles WP_Post

$posts  = get_posts( [ 'posts_per_page' => 10 ] );
$titles = wp_list_pluck( $posts, 'post_title' ) );

Dans cet exemple, on utilise wp_list_pluck() en lui passant :

  1. en premier argument, le tableau (d’objets) dans lequel on veut extraire des valeurs,
  2. en deuxième argument, la clé/nom du champ qui nous intéresse.

On obtient ainsi :

Array
(
    [0] => Unum nescio
    [1] => Atqui pugnantibus et contrariis studiis consiliisque semper utens nihil quieti videre
    [2] => His enim rebus detractis negat se reperire in asotorum vita quod reprehendat
    [3] => Unum nescio
    [4] => Nunc haec primum fortasse audientis servire debemus
    [5] => Quis negat
    [6] => Quid ergo attinet gloriose loqui
    [7] => Apud imperitos tum illa dicta sunt
    [8] => Dulce amarum
    [9] => Quod quidem nobis non saepe contingit
)

Remplir les clés avec une autre valeur du tableau d’origine

Dernier point à savoir : un troisième argument optionnel permet de choisir quel autre champ devra être utilisé pour remplir les clés du tableau de résultats. Dans l’exemple ci-dessus, le tableau de résultats possède des index numériques normaux.

Mais regardons ce qu’il se passe si on ajoute ce troisième paramètre :

$posts  = get_posts( [ 'posts_per_page' => 10 ] );
$titles = wp_list_pluck( $posts, 'post_title', 'post_name' );

Le résultat devient :

Array
(
    [unum-nescio-2] => Unum nescio
    [atqui-pugnantibus-et-contrariis-studiis-consiliisque-semper-utens-nihil-quieti-videre] => Atqui pugnantibus et contrariis studiis consiliisque semper utens nihil quieti videre
    [his-enim-rebus-detractis-negat-se-reperire-in-asotorum-vita-quod-reprehendat] => His enim rebus detractis negat se reperire in asotorum vita quod reprehendat
    [unum-nescio] => Unum nescio
    [nunc-haec-primum-fortasse-audientis-servire-debemus] => Nunc haec primum fortasse audientis servire debemus
    [quis-negat] => Quis negat
    [quid-ergo-attinet-gloriose-loqui] => Quid ergo attinet gloriose loqui
    [apud-imperitos-tum-illa-dicta-sunt] => Apud imperitos tum illa dicta sunt
    [dulce-amarum] => Dulce amarum
    [quod-quidem-nobis-non-saepe-contingit] => Quod quidem nobis non saepe contingit
)

On obtient alors un tableau associatif en résultat, avec le slug de chaque article en clé (et son titre en valeur, comment avant).

Ce genre de tableau est bien pratique lorsque l’on souhaite par exemple remplir un menu déroulant ACF ou Gravity Forms avec des options spécifiques. En effet, ces extensions demandent souvent :

  • une valeur de champ en clé/index d’élément de tableau,
  • un label de champ en valeur d’élément de tableau.

Et vous, quel usage avez-vous de wp_list_pluck() lors de vos développements WordPress ?


Vous avez aimé cet article ?

Partagez-le sur vos réseaux sociaux en guise de remerciement :)


Laisser un commentaire