如何将ACF日期时间字段添加到WooCommerce邮件订单项中
问题解决:将ACF活动日期时间字段添加到WooCommerce订单邮件
你的代码无法显示ACF字段内容,核心原因是你错误地从订单项元数据中读取字段,但该日期字段实际存储在活动产品本身,而非订单项。以下是修正方案:
修正后的代码
// Add ACF Date & Time to New Order Email add_action('woocommerce_order_item_meta_end', 'email_confirmation_display_order_items', 10, 4); function email_confirmation_display_order_items($item_id, $item, $order, $plain_text) { // 仅处理产品类订单项,跳过运费、优惠券等非商品项 if ( ! $item->is_type('line_item') ) return; // 获取当前订单项对应的产品ID $product_id = $item->get_product_id(); // 如果是可变产品的子变体,改用下面这行获取变体ID // $product_id = $item->get_variation_id() ? $item->get_variation_id() : $item->get_product_id(); // 通过ACF函数读取产品上的日期时间字段 $event_date = get_field('event_date_and_time', $product_id); // 字段存在时格式化输出 if ( $event_date ) { // 按需求调整日期格式,示例为"年-月-日 时:分" $formatted_date = date('Y-m-d H:i', strtotime($event_date)); // 适配纯文本和HTML两种邮件格式 if ( $plain_text ) { echo "\n活动日期: " . $formatted_date . "\n"; } else { echo '<div style="margin-top: 8px;">活动日期: ' . esc_html($formatted_date) . '</div>'; } } }
关键说明
- 字段读取逻辑修正:用
get_field()(ACF原生函数)从产品ID中读取字段,替代原本的wc_get_order_item_meta(仅用于订单项自身的元数据)。 - 订单项类型过滤:添加
is_type('line_item')判断,避免在运费、优惠券等非商品项上执行无效逻辑。 - 日期格式化:根据你的ACF字段设置调整格式——如果ACF字段设置为返回「时间戳」,则直接用
date('Y-m-d H:i', $event_date);如果返回「已格式化字符串」,可直接输出或按需二次调整。 - 变体产品兼容:如果你的活动产品是可变产品,字段绑定在子变体上,需切换到注释里的代码获取变体ID。
排查要点
- 确认ACF字段的键名确实是
event_date_and_time(注意大小写和下划线,ACF字段键不可错)。 - 检查目标活动产品上是否已正确填写该日期时间字段。
- 测试HTML和纯文本两种邮件格式,确保显示正常。
内容的提问来源于stack exchange,提问作者David Henry
相关产品推荐
相关产品推荐

