ACF日期字段无法排除循环中过期事件的问题求助
解决WordPress自定义活动循环无法排除过期活动的问题
你的代码存在几个关键问题,导致无法正确过滤已过期的活动,以下是具体修正方案:
核心问题梳理
- 日期格式不匹配:你用
date('l j F')生成的是Monday 5 August这类格式,但WordPress的meta_query指定type => 'DATE'时,要求使用标准的Y-m-d(如2024-08-05)格式,否则日期比较逻辑会失效。 - 参数拼写错误:
meta-key应为meta_key(下划线而非短横线),数组键名拼写错误会导致参数不生效。 - 中文引号问题:代码中使用了中文单引号
‘’,PHP无法识别这类引号,会引发语法错误(可能被主题的错误处理机制屏蔽,所以没显示报错)。 - 冗余参数冲突:单独的
meta-key与meta_query里的date_clause重复,容易造成逻辑冲突。
修正后的代码
if( $orderby !== 'view_count' ) { $today = date('Y-m-d'); // 使用DATE类型要求的标准格式 $nectar_blog_arr = array( 'post_type' => 'evenement', 'posts_per_page' => $posts_per_page, 'post_status' => 'publish', 'meta_query' => array( 'relation' => 'AND', 'date_clause' => array( 'key' => 'event_startdate', 'value' => $today, 'type' => 'DATE', 'compare' => '>=' ) ), 'orderby' => array( 'date_clause' => 'ASC' ), 'offset' => $post_offset, 'category_name' => $category, 'paged' => $paged ); }
额外验证建议
- 确认
event_startdate自定义字段的存储格式确实是Y-m-d:如果字段存的是时间戳,需要调整为$today = current_time('timestamp');,同时将type改为'NUMERIC',compare保持'>='。 - 开启PHP错误日志排查潜在问题:在
wp-config.php中添加define('WP_DEBUG', true); define('WP_DEBUG_LOG', true);,错误会记录到wp-content/debug.log文件中。
内容的提问来源于stack exchange,提问作者Casper Boon
相关产品推荐
相关产品推荐

