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

WordPress Elementor自定义查询:显示当日及之后赛事赛程

解决Elementor循环网格无法显示当日赛事的问题

问题分析

你的代码能显示未来赛事但无法展示当日赛事,核心原因有两个:

  1. 日期格式不匹配:如果match_date是ACF的「日期选择器」字段(仅存储Y-m-d格式日期,无时分秒),你用date('Y-m-d H:i:s')生成的带时分秒的当前时间去对比,数据库字符串比较会判定当日日期(如2024-10-01)小于当前带时分秒的时间(如2024-10-01 14:30:00),导致>=条件无法匹配当日赛事。
  2. Meta Query覆盖冲突:直接赋值$meta_query会覆盖Elementor循环网格原有的查询条件,可能引发隐性冲突。

针对性解决方案

根据你的ACF字段类型选择对应代码:

情况1:match_date是ACF「日期选择器」(仅存日期)

add_action('elementor/query/next_fixtures', function($query){ 
    // 获取Elementor原有meta_query,避免覆盖
    $meta_query = $query->get('meta_query') ?: [];
    
    $meta_query[] = [
        'key' => 'match_date',
        'value' => date('Y-m-d'), // 仅用日期格式匹配
        'compare' => '>=',
        'type' => 'DATE' // 指定类型为DATE,确保数据库正确对比
    ];
    
    $query->set('meta_query', $meta_query);
    // 按日期升序排列
    $query->set('orderby', 'meta_value');
    $query->set('order', 'ASC');
});

情况2:match_date是ACF「日期时间选择器」(存Y-m-d H:i:s)

如果需要展示当日所有赛事(无论当前时间),把查询起点设为当日0点:

add_action('elementor/query/next_fixtures', function($query){ 
    $meta_query = $query->get('meta_query') ?: [];
    
    $meta_query[] = [
        'key' => 'match_date',
        'value' => date('Y-m-d 00:00:00'), // 当日0点作为起始时间
        'compare' => '>=',
        'type' => 'DATETIME'
    ];
    
    $query->set('meta_query', $meta_query);
    // 用meta_value_datetime确保时间排序正确
    $query->set('orderby', 'meta_value_datetime');
    $query->set('order', 'ASC');
});

额外检查点

  • 确认ACF字段设置:在match_date字段编辑页,查看「存储格式」是否和代码中的value格式一致(如ACF默认日期存储为Ymd的话,需把代码里的date('Y-m-d')改为date('Ymd'),type设为NUMERIC)。
  • 测试时可临时启用WP_DEBUG,查看是否有数据库查询错误,帮助排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:15:18