在过去的几天里,我一直在对问题进行故障排除,并且一直在圈里。真的可以用新鲜的眼睛来帮助我回答这个问题...
因此,我正在一个wordpress网站上工作,该网站的帖子具有一些与我需要运行的查询相关的自定义字段:“过期”和“我的排序顺序”。当我运行query_posts时,我希望结果是“ post-expired”不是“ yes”的帖子(此部分在我的代码中有效)。我还希望将结果按“我的排序顺序”的DESC数值排序(也可以使用),如果“我的排序顺序”有关联,我希望按日期对最近的帖子进行二次排序第一。
按日期的第二排序是我遇到麻烦的地方。
这是我现在拥有的代码:
<?php
$args = array(
'paged' => $paged,
'meta_query'=> array(
array(
'key'=>'post-expired',
'value'=> 'yes',
'compare' => '!='
)
),
'meta_key'=>'my-sort-order',
'orderby'=>'meta_value_num',
'order'=>'DESC'
);
$args = array_merge( $args , $wp_query->query );
query_posts( $args );
?>
使用上面的代码,我正确地获取了未过期的帖子,并且按照我的排序顺序降序对它们进行了排序(即100出现在99之前,依此类推)。但是,如果两个帖子都具有相同的排序顺序值,那么就会发生某种二级排序,我似乎无法控制(并且无法弄清楚它实际上是在排序的)。
解决此问题的第一个想法是,如果我想为该帖子设置特定的排序顺序,则仅将值添加到“我的排序顺序”。我以为如果其余帖子的此字段的值都留为空白,则它们将按照DESC日期的默认排序方式简单返回(按设置排序顺序的帖子之后)。但是,实际上发生的是,没有设置排序顺序值的所有帖子都根本没有返回...
接下来,我尝试在orderby字段中添加多个值,如下所示:
('orderby'=>'meta_value_num date')
这完全炸毁了我想要的两个排序顺序,并以意外的方式退回了帖子。我的印象是允许使用多个orderby值,但是由于某些原因,它在这里不起作用。
在这一点上,我不确定如何使这些潜在的解决方案中的任何一个起作用。有谁知道我该怎么做?1)首先按“我的排序顺序”字段对帖子进行排序,然后使用默认的日期排序返回该字段中没有值的其余帖子;还是2)弄清楚如何通过排序来控制次要顺序,以便任何与“我的排序顺序”相关的帖子都将按日期进行排序(最新的优先)?