我按自定义字段start_date(表单类型Ymd)对查询进行排序。排序应该始终是从新到旧的降序。如果某一天有多个日期条目,则这些条目应该按发布顺序排序。
我尝试了它与(后)日期,id,menu_order,但它从来没有在所有情况下工作。
start_date可能与过帐日期不同。
有没有查询的方式?
还是必须在news_start_date字段中添加小时和分钟?
或者可能切换到后日期全部,但这意味着在这个后端流一个优雅的大损失。
$meta_query = array(
'relation' => 'AND',
array(
'key' => 'news_start_date',
'value' => $today,
'compare' => '<=',
'type' => 'DATE'
),
array(
'relation' => 'OR',
array (
'relation' => 'AND',
array(
'key' => 'news_start_date',
'value' => $expire_date,
'compare' => '>=',
'type' => 'DATE'
),
array(
'key' => 'news_end_date',
'compare' => 'NOT EXISTS'
),
),
array (
'relation' => 'AND',
array(
'key' => 'news_end_date',
'compare' => 'EXISTS'
),
array(
'key' => 'news_end_date',
'value' => $today,
'compare' => '>=',
'type' => 'DATE'
),
),
),
);
$args = array(
'post_type' => 'news',
'meta_query' => $meta_query,
'posts_per_page' => $news_count,
'meta_key' => 'news_start_date',
'orderby' => 'meta_value',
'orderby' => array(
'meta_value' => 'DESC',
'ID' => 'DESC',
//'menu_order' => 'DESC',
//'date' => 'DESC',
//'publish_date' => 'DESC',
),
'order' => 'DESC',
'post__not_in' => $sticky_posts,
'ignore_sticky_posts' => true,
'cache_results' => true,
'update_post_meta_cache' => true,
'no_found_rows' => true,
'suppress_filters' => false,
);
我尝试了其他字段,但从来没有一个100%正确的顺序
1条答案
按热度按时间zujrkrfu1#
向查询args添加第二个orderby参数,其中第一个
orderby
为meta_value
,第二个orderby为ID
。这将首先按news_start_date
字段对结果进行排序,然后按ID
字段(表示发布顺序)作为辅助排序选项进行排序。您可以通过向查询参数中添加以下行来完成此操作:
查询结果将首先按“news_start_date”降序排序,然后按“ID”降序排序,这将按您想要的顺序给予结果。