我正在尝试对wp_query的结果进行排序,我想通过不同的参数对其进行排序,而不再进行查询。我有类似的东西:
$the_query = new WP_Query( $args );
我想要排序$ the_query,WP_Query返回一个类似的结构:
$the_query->posts[0]->title;
所以,我想用'title'对所有元素进行排序。我试过这个:
usort($the_query->posts, function($a, $b) {
return $a['title'] - $b['title'];
});
我想在查询之后进行排序。是因为我想多次tosort,我不想每次想要排序时进行查询
解
返回致命错误:不能使用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
);
});
感谢所有
答案 0 :(得分:8)
查看WP_Query
中的orderby
和order
参数。如果您需要按帖子标题排序,可以将以下内容添加到查询参数
'orderby' => 'title'
'order' => 'ASC'
修改强>
如果您需要使用usort
进行排序,则可以执行以下操作
usort($the_query->posts, function($a, $b) {
return strcasecmp(
$a->post_title,
$b->post_title
);
});
答案 1 :(得分:0)
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;
}