按倍数 meta_keys 排序,然后按 date_modified 排序

orderby multiple meta_keys and then orderby date_modified

为每个天赋创建一个 post,状态为 coming-soonin-townothers 保存为 meta_values。我需要先显示 posts "coming-soon" 然后 "intown" 然后 "others".

我意识到我在寻找 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 得到 posts,我希望这些 posts 再次成为 date_modified 订购,并且可能对其订单进行控制,例如。升序,降序。我很确定这是可能的。我只是不知道如何进一步嵌套它。

已解决。我会留下答案,以防将来对某人有所帮助。我不得不更换这条线。

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

用这条线。

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

我认为代码很漂亮 self-explanatory。它的作用是,它将允许您 运行 您 primary-orderby 然后一旦您获得这些结果,您就可以 运行 一个 secondar-orderby。当然,第二个关联数组不限于modified,可以是任何其他的parameters of orderby。例如。标题、作者等