1

get_categories用来在我的首页显示一个类别中的帖子,但我想按我定义的顺序排列类别,比如:

$cat_order = 5,2,4,1,3 //order by category ID
or
$cat_order = cat5,cat2,cat4,cat1,cat3 // order by cat name

下面是我当前的代码,它通过命令 catname, ASC

<?php
//for each category, show all posts
$cat_args=array(
  'orderby' => 'name',
  'order' => 'ASC'
   );
$categories=get_categories($cat_args);
  foreach($categories as $category) {
    $args=array(
      'showposts' => -1,
      'category__in' => array($category->term_id),
      'caller_get_posts'=>1
    );
    $posts=get_posts($args);
      if ($posts) {
        echo '<p>Category: <a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . '>' . $category->name.'</a> </p> ';
        foreach($posts as $post) {
          setup_postdata($post); ?>
          <article >
            <h3><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>

            <?php the_content(); ?>
          </article>
          <?php
        } // foreach($posts
      } // if ($posts
    } // foreach($categories
?>
4

1 回答 1

2

无法在查询本身中对此进行排序。获得结果后,您必须自己对其进行排序。要按自定义条件对数组进行排序,请使用该usort函数。这是一个例子:

$categories = get_categories();
$cat_order  = array(5, 2, 4, 1, 3);

usort($categories, function ($a, $b) {
    return ((int) array_search($a->term_id , $cat_order)) - ((int) array_search($b->term_id , $cat_order));
});

如果您确定所有类别都在您的$cat_order数组中,则可以放弃整数转换。


PS如果您使用的是 PHP < 5.2,请改用命名函数:

function sort_categories ($a, $b) {
    return ((int) array_search($a->term_id , $cat_order)) - ((int) array_search($b->term_id , $cat_order));
}

usort($categories, 'sort_categories');
于 2013-01-27T02:33:15.103 回答