orderby多个meta_keys然后orderby date_modified

时间:2017-03-28 05:55:32

标签: php wordpress sql-order-by

为每位人才创建一个帖子,状态为coming-soonin-townothers,保存为meta_values。我需要先显示帖子"即将到来"然后" intown"然后"其他"。

我意识到我正在寻找 orderby multiple meta_keys 并找到了solution here。我转换了语法,以便它与pre_get_posts钩子一起使用(因为它是category.php中的主循环)。根据我的需要,下面的代码主要用于显示coming-soon->in-town->others排序的结果。

add_filter('pre_get_posts', 'pre_get_posts_hook' );
function pre_get_posts_hook($wp_query) {
      if (is_category() && $wp_query->is_main_query()) {

          $wp_query->set('meta_query', 
                      array( 'relation' => 'OR',                 
                             'soon' => array( 'key' => 'coming_soon',                                                            
                                              'value'   => 'yes',                                                                                 
                                              'compare' => '='
                                               ),
                              town' => array( 'key' => 'in-town',
                                              'value'   => 'positive',    
                                              'compare' => '='
                                              ),
                              'others' => array( 'key' => 'others',                                                                                           
                                              'value' => 'null',                                  
                                              'compare' => '='
                                              )                                         
                           )
                   );
        $wp_query->set('orderby', array('soon' => 'DESC', 'town' => 'DESC', 'others' => 'DESC'));
        return $wp_query;
    }
}

现在,我需要运行第二级orderby。我的意思是,通过上面的代码,我首先获得了meta_key coming-soon的帖子,我希望这些帖子能够再次由date_modified 再次,并可能对其订单进行控制,例如。 ASC,DESC。我很确定这是可能的。我不知道如何进一步嵌套它。

1 个答案:

答案 0 :(得分:0)

<强>解决即可。我将留下答案,以防将来可能对某人有所帮助。我不得不更换这条线。

$wp_query->set('orderby', array('soon' => 'DESC', 'town' => 'DESC', 'others' => 'DESC'));

这一行。

$wp_query->set('orderby', array('meta_value' => 'DESC', 'modified' => 'DESC' ));

我认为代码非常明显。它的作用是,它允许你以primary-orderby运行,然后一旦你得到那些结果,你就可以运行secondar-orderby。当然,第二个关联数组不限于modified,它可以是任何其他parameters of orderby。例如。标题,作者等。