You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:25:17