CodiFolio

Wordpress - Changer l'ordre d'apparition des catégories sans plugin.

Introduction:

J'ai utilisé cette solution pour un projet ponctuel. Ce projet n'est pas un blog, c'est un site internet dont la navigation est basée sur les catégories.
La home devait afficher pour chaque catégorie un post. Wordpress ne permet pas, sans plugin de choisir l'ordre dans lequel doivent apparaître les catégories. Bien que la méthode get_categories() accepte un argument orderby, les champs que l'on peut trier ne sont guère intéressants (id, name - default, slug, count, term_group).

Une idée:

Cependant, il y a un endroit dans le backoffice de Wordpress ou il est possible de trier les catégories: Appeareance - Menus.
En créant un menu et en ne mettant dedans que des catégories, Wordpress permet d'ordonner cette liste.
Si dans le code du template on est capable de consulter ce menu et de récupérer l'id de chaque catégorie, alors on peut afficher les catégories dans l'ordre voulu en faisant:
Pour chaque noeud du menu, donne moi la catégorie qui a cet id, merci.

Le code:

Voici le code php utilisé dans le template:

// Récupérer les éléments du menu
$menu_items = wp_get_nav_menu_items("menu_nav");
// pour chaque élément du menu, récupérer la catégorie associée
foreach ($menu_items as $mi) {
	$c = get_category($mi->object_id);
	$cat_num_post = $c->count;
	// Récupérer le premier post de la catégorie
	$home_post = get_posts(array(
			"cat"=> $c->term_id,
			"suppress_filters" => false,
			"posts_per_page" => 1
			)
	);
	
	// faire des trucs avec tout ça
	// ...
	// pim pam ...
	// ...
	
}
		

Inconvénients:

  • Le premier souci vient du fait que l'on doit aller modifier son menu à chaque fois que l'on ajoute une catégorie. Il faut ajouter la nouvelle catégorie au menu.
  • Les requêtes à la base de données sont multipliées. Au lieu de demander toutes les catégories que l'on souhaite en une fois, on les demande une par une.

Retour à l'index.

Commentaires.

Cet article vous a plu ou pas, vous êtes un robot...
Dites-le via le formulaire ci-dessous: