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

WordPress自定义文章(ACF)未来日期被误判为旧内容问题

问题根源

你遇到的问题是日期字符串格式导致的比较逻辑错误:

  • 你用m-d-Y(月-日-年)格式的字符串做比较,而字符串是按从左到右的字符顺序逐一对比的。比如"01-01-2024"和"12-31-2023",会先比较月份部分的01和12,因为01的字符ASCII值小于12,所以整个字符串会被判定为更小,导致所有2024年的事件都被当成旧事件过滤掉。
解决方案

方案1:修正循环内的日期比较逻辑(快速修复)

将字符串比较改为DateTime对象比较,避免字符串顺序的误导:

<?php 
$loop = new WP_Query( array( 
    'post_type' => 'evenement', 
    'posts_per_page' => 10, 
    'meta_key' => 'start_event', 
    'orderby' => 'meta_value', 
    'order' => 'ASC' 
) );
while ( $loop->have_posts() ) : $loop->the_post();

// 初始化今日的DateTime对象(默认取当前时间)
$today = new DateTime();
// 将ACF获取的日期转为DateTime对象,匹配存储的m-d-Y格式
$date_event = DateTime::createFromFormat( 'm-d-Y', get_field('start_event') );

// 用DateTime对象直接比较,逻辑准确
if ($date_event >= $today) { 
    // 转换为本地化日期格式
    $date_rendu = date_i18n("j F Y", $date_event->getTimestamp());
?>
<a href="<?php echo get_permalink() ?>">
    <div class="image">
        <?php echo the_post_thumbnail(); ?>
    </div>
    <div class="description">
        <div class="dates">
            <?php echo $date_rendu ?>
        </div>
        <div class="nom">
            <?php echo the_title(); ?>
        </div>
    </div>
</a>
<?php }; ?>
<?php endwhile; ?>

方案2:在WP_Query中直接过滤(性能更优)

避免循环内过滤的性能损耗,直接通过meta_query在数据库查询阶段就筛选出当日及未来的事件:

注意:建议直接在ACF字段设置里将「返回格式」改为Y-m-d,这样日期查询更直观高效。

假设ACF字段返回格式为Y-m-d(推荐设置):

<?php 
// 获取今日的Y-m-d格式字符串
$today = date("Y-m-d");

$loop = new WP_Query( array( 
    'post_type' => 'evenement', 
    'posts_per_page' => 10, 
    'meta_key' => 'start_event', 
    'orderby' => 'meta_value', 
    'order' => 'ASC',
    'meta_query' => array(
        array(
            'key' => 'start_event',
            'value' => $today,
            'compare' => '>=',
            'type' => 'DATE'
        )
    )
) );

while ( $loop->have_posts() ) : $loop->the_post();
    $date_event = get_field('start_event');
    $date_rendu = date_i18n("j F Y", strtotime($date_event));
?>
<a href="<?php echo get_permalink() ?>">
    <div class="image">
        <?php echo the_post_thumbnail(); ?>
    </div>
    <div class="description">
        <div class="dates">
            <?php echo $date_rendu ?>
        </div>
        <div class="nom">
            <?php echo the_title(); ?>
        </div>
    </div>
</a>
<?php endwhile; ?>

如果必须保留m-d-Y存储格式:

需要先将今日日期转为m-d-Y,并指定type为CHAR:

<?php 
$today = date("m-d-Y");

$loop = new WP_Query( array( 
    'post_type' => 'evenement', 
    'posts_per_page' => 10, 
    'meta_key' => 'start_event', 
    'orderby' => 'meta_value', 
    'order' => 'ASC',
    'meta_query' => array(
        array(
            'key' => 'start_event',
            'value' => $today,
            'compare' => '>=',
            'type' => 'CHAR'
        )
    )
) );

// 后续循环逻辑同方案1
?>

内容的提问来源于stack exchange,提问作者mmk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:15:04