首页 / 中文教程 / 教程

Bricks Countdown 倒计时元素接入动态日期(bricks/element/settings 补全实现)

Bricks 自带 Countdown 元素的日期不支持动态数据,无法从自定义字段取值。用官方过滤器在渲染前把日期替换成 ACF Date Time Picker 字段值。付费教程,本文给骨架并用官方钩子补全实现。

Ray Chan·2026-08-12·约 2 分钟

本文为付费教程的骨架翻译:场景与步骤按原文可见部分梳理,锁定代码按 Bricks 官方过滤器补全实现,并已注明「补全实现」。未复制原文代码。

场景:倒计时日期接不进自定义字段

营销活动页、新品发布页经常放一个 Countdown 倒计时元素。但截至 Bricks 1.9.7.1,内置 Countdown 元素的 Date 控件不支持动态数据——你没法在构建器里直接把日期绑定到某个自定义字段(比如 ACF 的 Date Time Picker)上。每次活动改期,都得进编辑器手动改日期,容易漏改。

BricksLabs 给出了两条出路:

  1. BricksExtras 插件的 Pro Countdown 元素(付费插件,自带动态日期支持);
  2. 用 Bricks 官方过滤器在渲染前把日期设置改写为自定义字段的值——不依赖插件,本文采用这条路线。

步骤骨架(原教程)

原教程的可见步骤(具体代码被付费墙截断):

  1. ACF 添加一个类型为 Date Time Picker 的字段(例如 event_date),并赋值到相应文章/页面。其他自定义字段插件(如 Meta Box)的日期时间字段同理。
  2. 在页面里添加 Countdown 元素,日期先用任意占位值。
  3. 在子主题 functions.php 或代码片段插件里挂官方过滤器,让 Countdown 渲染时读取当前文章的日期字段值并替换 Date 设置。

补全实现:渲染前改写日期设置

原文提到使用 bricks/element/render 过滤器族;补全实现选用 Bricks 官方标准过滤器 bricks/element/settings(在元素渲染前改写设置,是动态注入设置值的正路),完整代码如下(补全实现):

/**
 * Countdown 元素动态日期:从 ACF Date Time Picker 字段取值
 * 补全实现(基于 Bricks 官方 bricks/element/settings 过滤器)
 */
add_filter( 'bricks/element/settings', function( $settings, $element ) {
	// 只处理 Countdown 元素
	if ( $element->name !== 'countdown' ) {
		return $settings;
	}

	// 读取当前文章/页面的 ACF 日期时间字段(字段名按你的实际修改)
	$event_date = function_exists( 'get_field' ) ? get_field( 'event_date' ) : '';

	if ( $event_date ) {
		// ACF 返回的格式可能是 Ymd 或带时间戳,统一转成 Bricks Countdown 期望的格式
		$timestamp  = is_numeric( $event_date ) ? (int) $event_date : strtotime( $event_date );
		$settings['date'] = date( 'Y-m-d H:i:s', $timestamp );
	}

	return $settings;
}, 10, 2 );

要点:

  • $element->name 是 Bricks 元素的内部标识,Countdown 对应 countdown
  • get_field( 'event_date' ) 取当前文章/页面的字段值;在归档页/循环里取不到文章上下文时,可改用 get_post_meta( get_the_ID(), 'event_date', true )
  • ACF Date Time Picker 默认返回值可能是 Y-m-d H:i:s 字符串,strtotime 转时间戳后统一格式化为 Bricks Countdown 需要的 Y-m-d H:i:s,避免时区/格式不一致导致倒计时算错。

原理说明

  • 为什么 Countdown 不支持动态数据:Bricks 部分控件(如日期类)在设计上没有接入动态数据解析器,构建器里拖不进 {field} 标签。这是 Bricks 的功能边界,不是 Bug。
  • bricks/element/settings 过滤器:Bricks 在每次渲染元素前都会执行 apply_filters( 'bricks/element/settings', $settings, $element ),允许你在输出前任意增删改元素的设置数组。改动设置 → 元素按新设置渲染,等于给任何控件补上了「动态数据」能力。
  • 过滤器的两个参数:第一个 $settings 是元素设置数组(键为控件 ID,如 date),第二个 $element 是元素对象(含 nameidpost_id 等),按 name 精准筛选、用 post_id 定位数据来源。
  • 别忘了在子主题 functions.php(或 Code Snippets 插件)里挂载,并确认字段名、日期格式与你的站点一致。

小结

Countdown 日期接不进自定义字段,就用 bricks/element/settings 在渲染前改写设置——这是 Bricks 给「官方没做动态数据的控件」补动态能力的标准姿势,不止倒计时,任何控件(日期、数字、链接……)都能照此办理。付费插件能解决的,官方过滤器也能,只是要多写几行代码。

需要帮忙?

用 Bricks 建站?我接客户项目。

从快速营销站到完整的 Bricks 建站,再到从 Elementor 迁移——我都做过。本站每篇教程都来自真实项目经验。告诉我你的需求,一个工作日内回复。

  • Bricks 建站与改版
  • Elementor / Divi → Bricks 迁移
  • Bricks → Astro / headless 性能升级
  • 速度优化,PageSpeed 95+ 目标