排列页面和类别的组合列表

时间:2013-12-29 作者:AndrettiMilas

我使用下面的代码在菜单中显示顶级页面和类别。(如果这样做不正确,请告诉我)。我想按字母顺序排列这些项目。问题是,如果我将参数添加到每一组括号中,我最终会得到两个按字母顺序排列的单独列表-我希望将每个列表中的项目组合起来,并从那里按字母顺序排列。我不知道我将从这里走到哪里,如果有任何帮助,我将不胜感激!

<?php wp_list_pages(\'title_li&depth=1\'); wp_list_categories(\'title_li&depth=1\'); ?>

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

问题是,您正在使用输出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\'); ?>
进一步阅读:

结束

相关推荐

List of Posts and Categories

我有一个自定义的物种分类法和一个自定义的动物post类型。我想在树状视图中显示它们,如下所示:所有动物Fish (taxonomy term)<鲨鱼(自定义贴子类型)太阳鱼Mammals<猴子斑马列表中的每个项目都将链接到各自的位置。因此,自定义帖子类型链接到动物,分类术语转到分类页面。我知道WordPress列出类别的方法,但我也希望将帖子分组到每个类别下(自定义分类法)。