如何让WP_Query显示全部文章并按指定meta字段排序?
解决方案
你的问题出在原meta_query仅筛选了存在press_release_date元字段且值≤今日的文章,导致无该字段的内容被排除。要实现「有字段的按日期排序在前,无字段的在后」的需求,需要调整meta_query的逻辑关系,并优化排序规则:
修改后的代码
$today = date('Ymd'); $_press_release = new WP_Query(array( 'post_type' => 'press_release', 'meta_key' => 'press_release_date', 'posts_per_page' => -1, 'orderby' => array( 'meta_value_num' => 'DESC', // 有日期字段的按数值降序排列 'post_date' => 'DESC' // 无日期字段的按文章发布日期降序,可按需调整 ), 'meta_query' => array( 'relation' => 'OR', // 两个条件满足其一即可 array( 'key' => 'press_release_date', 'compare' => '<=', 'value' => $today, 'type' => 'numeric' ), array( 'key' => 'press_release_date', 'compare' => 'NOT EXISTS' // 匹配无该元字段的文章 ) ) ));
关键调整说明
meta_query逻辑修改:- 将关系设为
OR,同时包含两个条件:存在press_release_date且值≤今日,以及不存在该元字段的文章,这样就能覆盖所有目标内容。
- 将关系设为
- 排序规则优化:
- 用
orderby数组指定优先级:先按press_release_date的数值降序排列(有字段的内容会优先展示并按日期排序),无字段的内容则按文章发布日期降序排列(可根据需求替换为post_title等其他字段)。
- 用
- 确保数值排序有效性:
- 确认
press_release_date元字段的存储格式为Ymd(如20240520)的数值型,这样meta_value_num才能正确按日期大小排序。
- 确认
内容的提问来源于stack exchange,提问作者user20526493
相关产品推荐
相关产品推荐

