问题是,您正在使用输出html作为字符串的函数,所以很难对它们进行排序。也许可以使用html解析器,但也有一些更简单的选择。
首先肯定是使用核心菜单功能,但我知道,如果没有在后端创建菜单,并且如果您正在寻找一个没有任何配置的函数,那么从代码中使用它是不可能的,这不可能是解决方案。
另一种方法是使用函数检索页面和类别,合并它们,按字母顺序排序,最后生成html输出。
这比看起来更容易,您只需要一个函数:
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;
}
}
使用它
<?php page_cat_menu(); ?>
替换实际
<?php wp_list_pages(\'title_li&depth=1\'); wp_list_categories(\'title_li&depth=1\'); ?>
进一步阅读: