Wordpress WP_Query category__in with order

时间:2014-07-16 00:30:42

标签: php wordpress

您好我正在尝试查询以获取特定类别的帖子:

$args = array('category__in' => array(8,3,12,7));

$posts = new WP_Query($args);

但是我需要以特定顺序显示的帖子(首先是cat id 8,然后是3等),我无法让它正常工作,帖子会根据到ASC或DESC名称。

任何帮助?

2 个答案:

答案 0 :(得分:0)

据我所知,这里最好的方法是进行4次单独查询。

答案 1 :(得分:0)

您可以按post__in排序以使用输入值的顺序,但使用category__in它是多对多的关系,因此使用它的顺序要困难得多,并且不支持据我所知。另请注意,WP_Query() 会返回一系列帖子。

如果您有一组特定的排序规则,则可以使用get_posts()参数从category获取结果,然后使用自定义排序功能使用usort()对结果进行排序get_categories()

// function used by usort() to sort your array of posts
function sort_posts_by_categories( $a, $b ){
    // $a and $b are post object elements from your array of posts
    $a_cats = get_categories( $a->ID );
    $b_cats = get_categories( $b->ID );

    // determine how you want to compare these two arrays of categories...
    // perhaps if the categories are the same you want to follow it by title, etc

    // return -1 if you want $a before $b
    // return 1 if you want $b before $a
    // return 0 if they are equal
}

// get an array of post objects in the 'category' IDs provided
$posts = get_posts( array( 'category' => '8,3,12,7' ) );
// sort $posts using your custom function which compares the categories. 
usort( $posts, 'sort_posts_by_categories' );