J'utilise le code ci-dessous pour afficher les pages de haut niveau et les catégories dans mon menu. (Si c'est la mauvaise façon de le faire, s'il vous plaît faites le moi savoir). Je voudrais organiser les articles par ordre alphabétique. Le problème est que si j'ajoute l'argument à chaque ensemble de parenthèses, je me retrouve avec deux listes séparées, classées par ordre alphabétique - j'aimerais combiner les éléments de chaque liste et les classer par ordre alphabétique. Je ne sais pas où je vais à partir d'ici et j'apprécierais toute aide!
<?php wp_list_pages('title_li&depth=1'); wp_list_categories('title_li&depth=1'); ?>
Le problème est que les fonctions que vous utilisez affichent le code HTML en sortie, il est donc difficile de les commander. C'est possible, peut-être en utilisant un analyseur HTML, mais il existe des alternatives plus simples.
Premièrement, nous utilisons sûrement les fonctionnalités de menu principales, mais je sais que ce n’est pas possible de l’utiliser à partir de code si un menu n’est pas créé dans le backend, et si vous recherchez une fonction qui fonctionne sans configuration, cela ne peut pas être la solution .
Une autre approche consiste à utiliser des fonctions qui récupèrent les pages et les catégories, les fusionnent, les classent par ordre alphabétique et génèrent finalement la sortie HTML.
C'est plus facile qu'il n'y paraît, vous n'avez besoin que d'une fonction:
function page_cat_menu( $echo = 1 ) {
// get an array of both top level pages and categories
$items = array_merge( get_pages('parent=0'), get_categories('parent=0') );
if ( ! empty($items) ) {
$format = '<li><a href="%s">%s</a></li>'; // the format for item html
$menu = array();
// loop trought items to get html and set a key fo later ordering
foreach ( $items as $item ) {
if ( isset($item->term_id) ) { // is a category
$key = esc_html($item->name);
$li = sprintf( $format, esc_url( get_category_link( $item->term_id ) ), $key );
} else { // is a page
$key = esc_html( apply_filters('the_title', $item->post_title) );
$li = sprintf( $format, esc_url( get_permalink( $item->ID ) ), $key );
}
// populate menu array using page title or category name as key
$menu[$key] = $li;
}
// sorting array menu
ksort($menu);
$out = implode('', $menu);
// echo or return menu based on function argument
if ($echo) echo $out; else return $out;
}
}
Pour l'utiliser, il suffit de mettre
<?php page_cat_menu(); ?>
pour remplacer votre réelle
<?php wp_list_pages('title_li&depth=1'); wp_list_categories('title_li&depth=1'); ?>
Lectures complémentaires: