Ajouter des colonnes dans le tableau d’administration d’un type de contenu WordPress

Dans notre premier tutoriel, nous avons intégré deux nouveaux types de contenu, une taxonomie et des nouveaux champs pour stocker des données spécifiques à nos livres. Le second tutoriel a abordé l’affichage de ces nouvelles données en front-end, dans un nouveau template de thème. Aujourd’hui, j’explique comment modifier le back-end et afficher des nouvelles colonnes dans le tableau d’administration de nos nouveaux types de contenu pour que vous et vos clients aient un rapide aperçu des informations spécifiques à ces types de contenu.


Imaginez : votre client veut pouvoir ajouter des livres sur son site, assigner des informations spécifiques à ses livres (date de publication, image de couverture, auteur…). Si vous avez suivi nos vidéos précédentes, vous êtes parés pour combler les demandes du clients 😉 Mais les tableaux d’administration WordPress sont un peu tristes : seulement titres et dates de publication apparaissent, alors que l’on a à disposition pléthore d’autres données. Pourquoi s’en passer ?

Heureusement, WordPress offre une API peu compliquée et très pratique pour pouvoir afficher des nouvelles colonnes dans ces tableaux d’administration, et pouvoir y afficher le contenu que l’on désire. Deux hooks sont utilisés : un filtre permet d’ajouter / modifier les titres de nos colonnes, une action permet de contrôler le contenu de nos (nouvelles) colonnes (cellules du tableau).

function custom_auteur_columns_title($columns) {
 $columns['number_books'] = 'Nombre de livres';
 return $columns;
}
add_filter('manage_edit-auteur_columns', 'custom_auteur_columns_title');

function custom_auteur_columns_content($column) {
  global $post;

  switch ($column) {
    case 'number_books':
    $args = array( 'post_type' => 'livre', 'numberposts' => -1, 'meta_query' => array( array( 'key' => '_book_info_author', 'value' => $post->ID ) ) );
    $books = get_posts($args);
    echo count($books);
    break;
  }
}
add_action('manage_auteur_posts_custom_column', 'custom_auteur_columns_content');

Ajouter des colonnes manage_edit-${post_type}_columns

Le nom de ce filtre est dynamique : il vous faudra évidemment modifier ${post_type} par le nom du type de contenu que vous aurez ajouté auparavant. Dans notre tutoriel, ayant ajouté un type de contenu Livre et ayant créé un template single-livre.php, notre filtre aura pour nom manage_edit-livre_columns. L’édition des colonnes d’un tableau d’administration des auteurs se fera avec le filtre manage_edit-auteur_columns.

La variable que l’on modifie (ici, $columns) est un tableau (array) associatif qui ressemble à ça :

array('title' => 'Titre', 'date' => 'Date', 'comments' => 'Commentaires'...);

…. à savoir, les clés sont les identifiants des colonnes que l’on utilisera ci-dessous pour modifier le contenu de chaque colonne, et la valeur de chaque clé correspond au nom lisible affiché en haut de chaque colonne.

Vous pouvez donc manipuler l’array $columns comme bon vous semble : ajouter des données ($columns[‘number_books’] = ‘Nombre de livres’) pour ajouter des colonnes en fin de tableau, ou bien utiliser des fonctions PHP pour ajouter des colonnes entre des colonnes déjà existantes avec array_slice().

Enfin, vous avez la possibilité d’agir directement sur les colonnes déjà existantes, par exemple :

$columns['title'] = 'Titre du livre';

… modifiera le nom de la colonne native « Titre » en « Titre du livre ». Une liste des identifiants des colonnes natives WordPress est disponible dans le Codex.

Modifier le contenu de nos cellules/colonnes manage_edit-${post_type}_columns

C’est bien beau d’ajouter des colonnes, encore faut-il pouvoir éditer le contenu de nos nouvelles colonnes! WordPress met à disposition l’action manage_edit-${post_type}_columns… même logique : le type de contenu fait partie du nom de l’action.

Nous utiliserons donc manage_edit-livre_columns et  manage_edit-auteur_columns pour prendre contrôle du contenu des nouvelles colonnes des tableaux d’administration de nos types de contenu.

Dans notre fonction utilisée par l’action pour afficher le contenu des colonnes, il suffit de comparer la valeur de $column avec l’identifiant de la colonne de votre choix, puis faire ce que vous souhaitez : dans notre vidéo-tutoriel ci-dessus, on y affiche des custom fields du contenu, comme la couverture du livre ou la date de publication du livre. On utilise également get_the_term_list pour afficher le(s) genre(s) (taxonomie) de notre livre.

Et voila! Avec un peu de code, nous avons transformé WordPress en un CMS puissant : nous disposons désormais de deux nouveaux types de contenu avec des champs personnalisés, et de tableaux d’administration présentant de nouvelles colonnes avec les données adéquates.

N’hésitez pas à me proposer l’analyse et l’étude de notions WordPress spécifiques pour mes prochains tutoriels vidéos!

A très vite…

Laisser un commentaire