Tableaux de liste d'administration WordPress : ajouter des filtres personnalisés

Publié: 2021-02-26

La plupart des informations sur vos pages et publications dans WordPress Admin sont organisées en tableaux. Quiconque utilise WordPress les connaîtra. Ils fonctionnent bien et vous permettent d'entreprendre des "modifications rapides" de certaines informations de page ou de publication, vous montrent la date à laquelle la publication ou la page a été publiée et bien plus encore. De plus, vous avez peut-être remarqué que vous pouvez filtrer ces tableaux avec une sélection de menus déroulants qui apparaissent en haut de chaque tableau.

Il n'y a cependant qu'une poignée de filtres. Alors, que faites-vous si vous souhaitez filtrer une valeur qui n'a pas de zone de filtre dans l'Admin ? Heureusement, WordPress nous permet d'ajouter nos propres filtres. Nous allons voir comment.

Pourquoi utiliser des filtres personnalisés ?

Alors, pourquoi auriez-vous exactement besoin de filtres personnalisés pour organiser les tables d'administration dans WordPress ? Imaginons que nous ayons un site qui a un grand nombre d'auteurs de messages et beaucoup de messages.

Hébergez votre site web avec Pressidium

GARANTIE DE REMBOURSEMENT DE 60 JOURS

VOIR NOS FORFAITS

Vous pouvez voir l'auteur des messages à partir du tableau Admin sans aucune modification. Ce que vous ne pouvez pas faire actuellement, c'est trier les publications par auteur. Il s'agit clairement d'une limitation importante si vous vouliez pouvoir visualiser facilement tous les messages écrits par un auteur particulier. Ce qui vous aiderait, c'est si vous pouviez afficher un menu déroulant de tous les auteurs de publication, puis en sélectionner un dans la liste. Cela pourrait vraiment accélérer les choses.

Voyons comment nous pourrions construire cela.

Création de notre filtre personnalisé

Pour vous aider à créer vos propres filtres, WordPress fournit les hooks restrict_manage_posts et pre_get_posts .

Le restrict_manage_posts est introduit dans le fichier wp-admin/includes/class-wp-posts-list-table.php autour de la ligne 557 et se déclenche avant que le bouton Filtrer ne soit créé au-dessus de la liste des tables d'administration.

Nous allons utiliser une fonction personnalisée et la lier avec le hook restrict_manage_posts comme d'habitude (regardez ici pour plus d'informations à ce sujet). Allez dans le dossier principal de votre thème actif et ouvrez le fichier functions.php avec votre éditeur préféré. A la fin du contenu du fichier, insérez le code ci-dessous :

 function my_author_filter(){ $screen = get_current_screen(); global $post_type; if( $screen->id == 'edit-post' ){ $my_args = array( 'show_option_all' => 'All Authors', 'orderby' => 'display_name', 'order' => 'ASC', 'name' => 'authors_admin_filter', 'who' => 'authors', 'include_selected' => true ); if(isset($_GET['authors_admin_filter'])){ $my_args['selected'] = (int)sanitize_text_field($_GET['authors_admin_filter']); } wp_dropdown_users($my_args); } } add_action('restrict_manage_posts','my_author_filter');

La condition principale que nous avons utilisée est if( $screen->id == 'edit-post') . Ici, nous avons utilisé la fonction WordPress get_current_screen() qui renvoie l'identifiant de l'écran sur lequel nous nous trouvons.

Dans ce cas, l'ID de l'écran d'administration est 'edit-post'. En d'autres termes, nous nous assurons que nous sommes sur l'écran d'administration des messages. Si, par exemple, nous voulions appliquer cela à l'écran d'administration des pages, nous devrions utiliser if( $screen->id == 'edit-page' ou si nous travaillions pour un type de message personnalisé, le edit-{post_type} serait la bonne instruction if.

Remarque : Pour voir quel ID correspond à chaque écran d'administration, vous pouvez consulter la documentation officielle sur la référence de l'écran d'administration.

Dans le code ci-dessous nous vérifions si un auteur est déjà sélectionné et si oui, nous appliquons la valeur sélectionnée :

 if(isset($_GET['authors_admin_filter'])){ $my_args['selected'] = (int)sanitize_text_field($_GET['authors_admin_filter']); }

Enfin, en utilisant la fonction WordPress wp_dropdown_users nous allons générer la liste déroulante des auteurs selon les arguments que nous avons définis précédemment.

Ensuite, nous avons choisi le texte qui affichera l'option 'show-all' dans l'argument show_option_all . Nous avons choisi la chaîne "Tous les auteurs". Dans l'argument 'nom', nous remplissons le nom souhaité pour la liste déroulante. Nous utiliserons cette valeur plus tard pour filtrer les résultats de la liste des publications.

Dans l'argument 'qui' nous définissons quel type d'utilisateurs interroger, dans notre cas 'auteurs'. Avec l'argument 'include_selected', nous choisissons si nous voulons inclure l'ID utilisateur sélectionné dans la liste déroulante.

À ce stade, si vous actualisez l'écran des messages d'administration, vous devriez voir le menu déroulant de l'auteur à côté des autres menus de filtre intégrés.

Si vous sélectionnez une valeur et appuyez sur "Filtre", la valeur restera sélectionnée lors du rechargement de la page, mais les résultats resteront inchangés. Dans notre prochaine étape, nous apporterons les modifications nécessaires afin de filtrer la liste des publications pour afficher uniquement les publications liées à l'auteur que nous avons sélectionné.

Filtrage des résultats

Encore une fois, le filtre pre_get_posts fera le travail. Nous avons examiné ce crochet dans notre article WordPress Admin Search : Étendre les résultats. Nous l'utiliserons à nouveau pour modifier l'objet de variable de requête qui est créé dans l'écran de post-administration, avant que la requête réelle ne soit exécutée. Dans votre functions.php insérez les lignes suivantes :

 function my_author_filter_results($query){ $screen = get_current_screen(); global $post_type; if ( $screen->id == 'edit-post' ) { if(isset($_GET['authors_admin_filter'])){ $author_id = sanitize_text_field($_GET['authors_admin_filter']); if($author_id != 0){ $query->query_vars['author'] = $author_id; } } } } add_action('pre_get_posts','my_author_filter_results');

La condition principale, comme précédemment, est également nécessaire ici pour s'assurer que nous sommes sur l'écran des messages d'administration.

Le $author_id = sanitize_text_field($_GET['authors_admin_filter']); conserve l'identifiant de l'auteur sélectionné dans la variable $author_id . Après cela, et si l'identifiant de l'auteur n'est pas 0 (tous les auteurs sont sélectionnés), nous passons la valeur $author_id dans le paramètre author de la requête.

Et c'est tout. Désormais, les messages affichés seront uniquement ceux qui appartiennent à l'identifiant auteur/utilisateur sélectionné.

Conclusion

Le filtrage personnalisé dans les écrans d'administration peut rendre votre contenu facilement consultable par les utilisateurs administrateurs, ce qui peut être inestimable lorsque vous avez beaucoup de publications ou de pages. Et bien sûr, ce n'est qu'une manière possible d'utiliser un filtre dans les tables Admin. Il existe une tonne d'autres façons que vous pourriez trouver utile et j'espère que les techniques que nous avons décrites ici vous aideront à créer vos propres filtres.

Par exemple, vous pouvez créer un menu déroulant de filtres avec les options permettant d'afficher les publications créées au cours des 30 derniers jours ou peut-être un filtre qui trie les publications selon n'importe quelle taxonomie. La liste query_vars peut vous aider à réfléchir aux options possibles !.

Amusez-vous à jouer avec cette fonctionnalité géniale !

Voir également

Tableaux de liste d'administration WordPress : ajouter des filtres personnalisés
Premiers pas avec les champs personnalisés WordPress