在过去的几天里,我一直在解决一个问题,并一直在兜圈子。真的可以用一双新鲜的眼睛来帮我回答这个问题。。。
因此,我正在与wordpress网站合作,其中帖子有一些与我需要运行的查询相关的自定义字段:“post expired”和“my sort order”。当我运行query\\u posts时,我希望结果是“post expired”不是“yes”的帖子(这部分在我的代码中起作用)。我还希望结果按“我的排序顺序”的DESC number值排序(也可以),如果“我的排序顺序”上有关联,我希望按日期进行二次排序,首先是最近的帖子。
第二种按日期排序是我遇到的问题。
下面是我现在掌握的代码:
<?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 );
?>
使用上面的代码,我正确地取回了未过期的帖子,并按我的排序顺序降序排列(即,99之前显示100,等等)。但是,如果两篇文章的排序顺序值相同,则会发生某种我似乎无法控制的二次排序(也无法确定实际排序的依据)。
我解决这个问题的第一个想法是,如果我想为那个帖子设置一个特定的排序顺序,那么只在“我的排序顺序”中添加值。我认为,如果对于其余的帖子,该字段的值为空,那么它们将以默认的排序方式按DESC date返回(在设置了排序顺序的帖子之后)。然而,实际发生的情况是,没有设置排序顺序值的任何帖子都不会返回。。。
接下来,我尝试在orderby字段中添加多个值,如下所示:
(\'orderby\'=>\'meta_value_num date\')
这完全破坏了我想要的两个排序顺序,并以一种意想不到的方式返回了帖子。我的印象是允许多个orderby值,但由于某种原因,它在这里不起作用。
在这一点上,我不知道如何使这些潜在的解决方案中的任何一个奏效。有人知道我如何1)首先按“我的排序顺序”字段对帖子进行排序,然后用默认的日期排序返回该字段中没有值的其余帖子;或者2)找出如何控制二级排序,以便任何与“我的排序顺序”相关的帖子都将按日期排序(最新的优先)?