QUERY_POSTS按多种方式排序

时间:2014-06-08 作者:user53902

我对query\\u posts orderby multiple ways有问题。我在Wordpress中有一个类别,在那里我需要显示具有排名的第一个帖子,然后按标题显示所有帖子。

下面是工作代码,工作正常,但不知道如何连接这些代码。

这段代码只显示排名靠前的帖子

  query_posts(array(\'cat\' => $category->term_id, \'posts_per_page\' => -1, \'orderby\' => \'meta_value\', \'meta_key\' => \'_bunyad_review_overall\', \'paged\' => ( get_query_var(\'paged\') ? get_query_var(\'paged\') : 1),));  
此代码显示按标题排序的所有帖子

  query_posts(array(\'cat\' => $category->term_id, \'posts_per_page\' => -1, \'orderby\' => title, \'order\' => ASC, \'paged\' => ( get_query_var(\'paged\') ? get_query_var(\'paged\') : 1),));  
我需要连接这些代码,在第二个代码中排除所有排名的帖子,因为第一个代码将显示这些帖子。

显示具有排名的帖子,按排名靠前的高排名显示所有帖子,按标题排序,按排名显示所有帖子!

1 个回复
SO网友:Miguel Garrido

首先,您需要使用WP\\u查询来获取这些帖子。然后您可以使用以下命令进行订购array.

// The Query
$args = array(
    \'cat\' => $category->term_id, 
    \'posts_per_page\' => -1, 
    \'orderby\' => \'meta_value\',
    \'meta_key\' => \'_bunyad_review_overall\',
    \'paged\' => ( get_query_var(\'paged\') ? get_query_var(\'paged\') : 1 ),
); 


$the_query = new WP_Query( $args );

// Create an array to store posts ID.
$posts_with_ranks = array();

// The Loop
if ( $the_query->have_posts() ) {
    while ( $the_query->have_posts() ) {
        // Your post content goes here

        // And also you can push each ID into this this array
        array_push( $posts_with_ranks , $post->ID );
    }
}

// reset post data
wp_reset_postdata();
现在我们有了$posts_with_ranks 有等级的职位。假设我们的数组如下所示:

$posts_with_ranks = array(1,3,5,10);
然后,您的第二个WP\\U查询应该如下所示:

// The Query
$args = array(
    \'cat\' => $category->term_id,
    \'posts_per_page\' => -1, 
    \'orderby\' => title, 
    \'order\' => ASC, 
    \'post__not_in\' => $posts_with_ranks, // Exclude posts from the previous WP_Query
    \'paged\' => ( get_query_var(\'paged\') ? get_query_var(\'paged\') : 1),
)

$the_query = new WP_Query( $args );

    // Create an array to store posts ID.
    $posts_with_ranks = array();

    // The Loop
    if ( $the_query->have_posts() ) {
        while ( $the_query->have_posts() ) {
            // Your post content
            array_push( $posts_with_ranks , $post->ID );
        }
    }

    // reset post data
    wp_reset_postdata();
所以基本上你需要知道:

1) 使用WP\\u Query检索排名为的帖子。

2) 使用array\\u push将这些帖子存储到数组中

3) 使用第二个WP\\u查询并使用排除排名为的帖子post__not_in.

您可以看到完整的wp\\U查询参数列表。

https://gist.github.com/billerickson/3698476#file-gistfile1-php

这是一个非常全面的参考。

http://codex.wordpress.org/Class_Reference/WP_Query

希望这有帮助!

结束

相关推荐