如何对 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 中的orderbyorder 参数。如果您需要按帖子标题排序,您可以在查询参数中添加以下内容

'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 的结果进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何对查询结果进行排序

当结果插入 HSQLDB 表时,如何对结果进行排序?

如何根据特定顺序对休眠结果进行排序

如何按修改日期对 CloudKit 结果进行排序?

如何在ListAPIView中使用django-filter对过滤结果进行排序

如何在 MongoDB 中搜索动态字段并首先对最佳匹配结果进行排序