多站点排序合并的GET_POSTS()查询

时间:2017-05-04 作者:Markus

我有一个多站点(测试)安装的WordPress,并希望获得每个博客的帖子。

几个小时后,我找到了解决办法。但现在,我有了合并查询,并喜欢按日期对每个博客中的帖子进行排序。现在我得到了blog1帖子,在所有blog1帖子之后,我得到了blog2帖子。

如何对数组排序?以下是迄今为止的代码:

$custom_posts = array();

$blog_ids = wp_get_sites();

foreach ($blog_ids as $key=>$current_blog) {

    switch_to_blog($current_blog[\'blog_id\']);

    $query = get_posts("posts_per_page=10");

    $custom_posts = array_merge($custom_posts, $query);

    restore_current_blog();

}

//SORT THE $custom_posts BY POST_DATE? HOW? :(

global $post; 

foreach($custom_posts as $post) : setup_postdata($post);

<<< theposts >>>.
.
endforeach;
我希望这是可能的。

或者有没有更好的方法来达到目标?

1 个回复
最合适的回答,由SO网友:birgire 整理而成

您可以尝试新的(4.7以上)wp_list_sort() 实用程序函数,它是WP_List_Util::sort() 使用usort()uasort().

Example 1:

按发布日期降序排序

$sorted_custom_posts = wp_list_sort( 
    $custom_posts, 
    \'post_date\', 
    \'DESC\' 
);

Example 2:

按发布日期降序和发布标题升序排序

$sorted_custom_posts = wp_list_sort( 
    $custom_posts, 
    [
        \'post_date\'  => \'DESC\',
        \'post_title\' => \'ASC\',
    ]
);
检查标记here 了解更多信息。