如何对wp_query的结果进行排序

时间:2014-11-15 06:55:09

标签: php arrays wordpress sorting wp-query

我正在尝试对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
        );
});

感谢所有

2 个答案:

答案 0 :(得分:8)

查看WP_Query中的orderbyorder参数。如果您需要按帖子标题排序,可以将以下内容添加到查询参数

'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;
}