如何对 wp_query 的结果进行排序
Posted
技术标签:
【中文标题】如何对 wp_query 的结果进行排序【英文标题】:How to sort the result of wp_query 【发布时间】:2015-01-12 15:15:07 【问题描述】:我正在尝试对 wp_query 的结果进行排序,我想通过不同的参数对其进行排序,而无需再次进行查询。我有类似的东西:
$the_query = new WP_Query( $args );
我想对 $the_query 进行排序,WP_Query 返回一个这样的结构:
$the_query->posts[0]->title;
所以,例如,我想按“标题”对所有元素进行排序。我试过这个:
usort($the_query->posts, function($a, $b)
return $a['title'] - $b['title'];
);
我想在完成查询后进行排序。是因为我想排序很多次,我不想每次排序时都做查询
解决方案
这会返回致命错误:不能使用 WP_Post 类型的对象作为数组
usort($the_query->posts, function($a, $b)
return $a['title'] - $b['title'];
);
这是因为数组的结构是这样的:
$the_query->posts[0]->title;
所以你必须将$a['title'] - $b['title']
更改为$a->title - $b->title
并使用 Pieter Goosen 的答案,最终结果是:
usort($the_query->posts, function($a, $b)
return strcasecmp(
$a->title,
$b->title
);
);
谢谢大家
【问题讨论】:
+1 为您的问题提供了出色的简洁格式 :-) 【参考方案1】:WP_Query('orderby=date&order=DESC')
如果您想根据自定义元值进行排序,也可以试试这个。
$args = array(
'post_type' => 'post',
'meta_key' => 'pb_issue_featured',
'orderby' => 'meta_value',
'order' => 'DESC',
'posts_per_page' => $posts,
'paged' => $paged,
'paged' => 1,
'meta_query' => array(
array(
'key' => 'headline',
'value' => 1,
'compare' => '!='
)
)
);
add_filter( 'posts_orderby', 'filter_query' );
$q = new WP_Query($args);
remove_filter( 'posts_orderby', 'filter_query' );
function filter_query( $query )
$query .= ', wp_posts.menu_order ASC';
return $query;
【讨论】:
您的回答与问题无关。另外,当您已经拥有该内置功能时,为什么还要使用自定义过滤器进行排序 好的,我明白了,但是我想在查询后进行排序,我的意思是我有 $query = new WP_Query($args) 我想对 $query 进行排序。是因为我想这样做很多次,我不想每次我想用“x”参数排序时都做查询【参考方案2】:查看WP_Query
中的orderby
和order
参数。如果您需要按帖子标题排序,您可以在查询参数中添加以下内容
'orderby' => 'title'
'order' => 'ASC'
编辑
如果您需要使用usort
进行排序,您可以执行以下操作
usort($the_query->posts, function($a, $b)
return strcasecmp(
$a->post_title,
$b->post_title
);
);
【讨论】:
这行得通,但我想在完成查询后进行排序,我的意思是我有 $query = new WP_Query($args) 我想对 $query 进行排序。是因为我想做很多次,我不想每次我想排序时都做查询 它返回致命错误:不能使用 WP_Post 类型的对象作为数组 酷,这就是我得到的解决方案以上是关于如何对 wp_query 的结果进行排序的主要内容,如果未能解决你的问题,请参考以下文章