自定义WordPress演出日期循环日期显示异常问题求助
解决WordPress自定义循环中ACF演出日期重复显示的问题
嘿,我一眼就瞅出问题所在啦!你把ACF日期的初始化代码放在了循环外面,这就导致它只会读取第一个帖子的演出日期,后面所有帖子都复用这个值,自然全显示同一个日期咯。
核心问题分析
你原来的代码里,$date = new DateTime(get_field('gig-date'));是在WP_Query定义之后、while循环之前执行的——这时候还没进入循环遍历帖子,get_field()只会拿到第一个匹配帖子的字段值,后续循环里一直用这个$date对象,所以所有帖子的日期都一模一样。
修正后的完整代码
<ul class="dates"> <?php $today = date('Ymd'); $loop = new WP_Query( array( 'post_type' => 'gigs', 'posts_per_page' => 2, // 替换旧的showposts参数,官方推荐用这个 'meta_key' => 'gig-date', 'meta_compare' => '>', 'meta_value' => $today, // 复用之前定义的$today变量,代码更统一 'orderby' => 'meta_value_num', 'order' => 'ASC' )); while ( $loop->have_posts() ) : $loop->the_post(); // 把日期初始化移到循环内部,每次处理当前帖子的字段 if( get_field('gig-date') ) { // 增加非空判断,避免字段为空时出错 $date = new DateTime(get_field('gig-date')); ?> <li> <div class="date"> <span class="day"><?php echo $date->format('d'); ?></span> <span class="month"><?php echo $date->format('M'); ?></span> </div> </li> <?php } endwhile; wp_reset_postdata(); // 自定义查询用这个重置更准确,替代wp_reset_query() ?> </ul>
额外优化说明
- 替换
showposts为posts_per_page:showposts是WordPress的旧参数,现在官方推荐用posts_per_page控制显示数量,兼容性更好。 - 增加ACF字段非空判断:如果某个帖子没填演出日期,会跳过日期渲染,避免DateTime初始化报错。
- 改用
wp_reset_postdata():对于自定义WP_Query,这个函数只会重置当前帖子的全局数据,比wp_reset_query()更精准,不会影响其他查询。
特殊情况处理
如果你的ACF日期字段返回的不是DateTime能直接识别的格式(比如自定义的d/m/Y格式),可以用date_create_from_format()指定格式初始化:
// 假设ACF返回格式是"日/月/年" $date = date_create_from_format('d/m/Y', get_field('gig-date'));
内容的提问来源于stack exchange,提问作者CharlyAnderson
相关产品推荐
相关产品推荐

