如何在php中按对象字段对WP_Post对象数组进行排序?

时间:2020-07-08 作者:user1950349

我有一个php代码,如下所示,我想在其中排序WP_Post Object 按对象字段排列post_date.

if ( $search ) {
    $area_query = new \\WP_Query( [
        \'s\'           => $search,
        \'post_type\'   => \'abc-xyz\',
        \'post_status\' => \'publish\'
    ] );
}   

                    
这就是我尝试的目的WP_Post object 数组,但它似乎不起作用。

if ( $search ) {
    $area_query = new \\WP_Query( [
        \'s\'           => $search,
        \'post_type\'   => \'abc-xyz\',
        \'post_status\' => \'publish\',
        \'orderby\' => \'date\',
        \'order\' => \'ASC\',
    ] );
}   

                    

Problem Statement:

我想知道我应该在上面的php代码中做些什么更改,以便对其进行排序WP_Post 对象数组按日期排序。

1 个回复
SO网友:Tom J Nowell

我想知道我应该在上面的php代码中做些什么更改,以便它按日期对WP\\U Post对象数组顺序进行排序。

WordPress/PHP不会对对象进行排序,这不是它的工作方式。此外sort 参数不采用对象字段的名称。两者没有连接。post的顺序由SQL查询返回的post表中的行的结果决定。

相反sort 是用于构造SQL查询的参数。If we look at the documentation we can see the valid values, 因此,您已经在使用正确的订单参数:

$area_query = new \\WP_Query( [
    \'s\'           => $search,
    \'post_type\'   => \'abc-xyz\',
    \'post_status\' => \'publish\',
    \'orderby\'     => \'date\',
    \'order\'       => \'ASC\',
] );
上述代码要求数据库按日期升序排列帖子(例如1AD、2AD、500AD、1000AD、2000AD等)。可能是你想要相反的结果。

请注意,如果您将数据存储在post meta中,这将不起作用date 这是这篇文章发表的日期。

相关推荐

如何在GET_POSTS()函数中通过某个页面的插件及其所有子页面获取页面ID数组?

我的主题中有一个自定义函数,可以创建动态sitemap.xml 文件我用的是$myVar = get_posts( array(...) ). 在该数组中,我需要排除一些页面。我想排除某些父页面及其所有子页面。我只想使用父页面slug来获取父页面和子页面的所有ID的数组。问题是:\'exclude\' => 在array() 仅接受ID数组。不是鼻涕虫。如何通过某种函数(或其他方式)通过父页面slug返回ID数组(包括父ID及其所有子项)来实现它?例如,假设父页面slug是abc.谢谢你了。