为每位人才创建一个帖子,状态为coming-soon
或in-town
或others
,保存为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。我很确定这是可能的。我不知道如何进一步嵌套它。
答案 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。例如。标题,作者等。