如何查询ACF字段launch_date为今日及以后的WordPress自定义文章?
你代码里一共存在4处核心问题:
- 日期格式不匹配:你当前用
date('M, d')生成的是「月份缩写, 日期」格式(比如Oct, 07),但ACF的日期类字段默认存储格式为Y-m-d(带时间的话是Y-m-d H:i:s),两种格式完全不兼容,数据库没法正确做大小比较。 - 比较运算符用反了:你要的是今日及以后的内容,应该用大于等于
>=,你现在写的<=是查询今日及以前的内容,和需求完全相反。 - 字段类型声明不一致:
meta_query里你把字段类型设为DATETIME,但外部排序参数里meta_type又设为DATE,类型不统一会导致数据库比较时出现不可预期的偏差,根据你的字段实际存储格式统一就行,纯日期就都用DATE,带时间就都用DATETIME。 - 排序参数不规范:按日期类型的自定义字段排序时,直接用
meta_value_date作为orderby的取值更稳妥,不需要额外声明meta_type也能保证排序正确。
修正后的代码如下:
<?php // 生成和ACF日期字段存储格式匹配的当前日期 格式为 年-月-日 $date_now = date('Y-m-d'); // 构造查询参数 $args = array( 'posts_per_page' => 20, 'post_type' => 'project', 'meta_query' => array( array( 'key' => 'launch_date', 'compare' => '>=', 'value' => $date_now, 'type' => 'DATE' // 如果你的launch_date带时间就改成DATETIME,同时上面的$date_now改成date('Y-m-d H:i:s') ) ), 'order' => 'ASC', // 按launch_date升序就是更近的日期排在前面,要倒序就改成DESC 'orderby' => 'meta_value_date', 'meta_key' => 'launch_date' ); // 实际执行查询用new WP_Query即可,你原有代码里的build_query仅用于打印调试参数 $project_query = new WP_Query( $args ); // 后续正常写循环输出逻辑即可 ?>
内容的提问来源于stack exchange,提问作者Danneniko
相关产品推荐
相关产品推荐

