Filtrer les publications par taxonomie personnalisée dans l’administration

logo carre@4x

Si vous avez beaucoup de publications sur votre site WordPress, vous avez probablement utilisé les filtres Catégorie et/ou Balise en haut de la page de liste de publications. Ces filtres sont formidables car ils vous permettent très rapidement de limiter le type de messages affichés et de trouver celui(s) que vous recherchez avec une relative facilité. Eh bien, si vous utilisez des types de publication personnalisés ou des taxonomies personnalisées, vous avez probablement remarqué que ces options ne sont pas disponibles. Je vais donc vous montrer comment ajouter de nouveaux filtres pour vos taxonomies personnalisées à tout type de publication personnalisé que vous avez enregistré sur votre site.

Le processus est assez simple, dans le sens où il ne nécessite pas beaucoup de code et WordPress fait la majeure partie du travail à votre place, mais la fonction elle-même est un peu complexe. Ce que nous allons faire est de configurer une fonction qui crée un menu de sélection déroulant basé sur les termes des taxonomies que nous proposons. Ainsi, si nous définissons la fonction pour afficher un filtre pour la taxonomie « genres », elle récupérera une liste de tous les termes de cette taxonomie (tous les termes qui ne sont pas vides), puis affichera chacun de ces termes en option dans le menu déroulant. Si nous fournissons plusieurs taxonomies, via un tableau, alors la fonction créera une liste déroulante pour chaque ensemble de termes de taxonomie.

<?php
function pippin_add_taxonomy_filters() {
	global $typenow;
 
	// an array of all the taxonomyies you want to display. Use the taxonomy name or slug
	$taxonomies = array('faq_topics');
 
	// must set this to the post type you want the filter(s) displayed on
	if( $typenow == 'faqs' ){
 
		foreach ($taxonomies as $tax_slug) {
			$tax_obj = get_taxonomy($tax_slug);
			$tax_name = $tax_obj->labels->name;
			$terms = get_terms($tax_slug);
			if(count($terms) > 0) {
				echo "<select name='$tax_slug' id='$tax_slug' class='postform'>";
				echo "<option value=''>Show All $tax_name</option>";
				foreach ($terms as $term) { 
					echo '<option value='. $term->slug, $_GET[$tax_slug] == $term->slug ? ' selected="selected"' : '','>' . $term->name .' (' . $term->count .')</option>'; 
				}
				echo "</select>";
			}
		}
	}
}
add_action( 'restrict_manage_posts', 'pippin_add_taxonomy_filters' );

La fonction est ensuite transmise via le hook d’action « restrict_manage_posts » afin que les menus de sélection soient affichés dans la page de liste de publications.

Si tout a fonctionné correctement, vous devriez voir quelque chose comme ceci :

Notez que dans la fonction, il existe une vérification du type de publication actuel. Si vous ne définissez pas l’instruction conditionnelle $typenow sur le type de publication sur lequel vous souhaitez afficher le filtre, il s’affichera sur TOUTES les pages de type de publication, et comme tous vos types de publication ne peuvent pas avoir la taxonomie personnalisée, ce n’est généralement pas une bonne idée.