我正在使用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
下面是我目前的代码,它按name, 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
?>
答案 0 :(得分: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
数组中,则可以放弃整数投射。
P.S。如果你正在使用PHP&lt; 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');