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

如何为Elementor循环轮播按ACF自定义日期字段升序排序?

解决Elementor循环轮播按ACF日期字段排序并筛选当前活动的问题

问题核心分析

你之前的代码存在两个关键问题:

  1. Elementor的elementor/query/{$query_id}钩子需要修改传入的$query对象参数,而非重新实例化WP_Query或直接返回参数数组。
  2. ACF日期选择器设置的l j F是前端显示格式,数据库实际存储的是Ymd(如20240301)格式的字符串,你之前用date("Y-m-d")进行格式不匹配的比较,且排序逻辑错误。

正确代码实现

  1. 先在Elementor循环轮播的「查询」设置中,设置自定义查询ID(比如events_sort,务必记好这个ID)。
  2. 将以下代码添加到主题的functions.php文件,或使用代码片段插件:
function filter_events_by_date( $query ) {
    // 生成匹配ACF存储格式的当前日期字符串
    $current_date = date( 'Ymd' );

    // 修改查询基础参数
    $query->set( 'post_type', 'dates' );
    $query->set( 'post_status', 'publish' );
    $query->set( 'meta_key', 'date-event' );
    $query->set( 'orderby', 'meta_value' );
    $query->set( 'order', 'ASC' );
    $query->set( 'posts_per_page', 15 );

    // 设置筛选规则:仅显示当前及以后的活动
    $meta_query = array(
        array(
            'key'     => 'date-event',
            'value'   => $current_date,
            'compare' => '>=',
            'type'    => 'DATE',
        )
    );
    $query->set( 'meta_query', $meta_query );
}
// 替换events_sort为你在Elementor中设置的自定义查询ID
add_action( 'elementor/query/events_sort', 'filter_events_by_date' );

关键说明

  • 自定义查询ID替换:必须将代码中的events_sort替换为你在Elementor循环轮播查询设置里填写的ID,否则钩子不会生效。
  • 日期格式匹配:ACF日期选择器默认存储格式为Ymd,用date('Ymd')生成当前日期,确保筛选逻辑精准匹配。
  • 排序逻辑:Ymd格式的字符串可自然按升序排列,使用orderby => meta_value即可实现活动按日期从早到晚排序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:47:37