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

如何将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>';
        }
    }
}

关键说明

  1. 字段读取逻辑修正:用get_field()(ACF原生函数)从产品ID中读取字段,替代原本的wc_get_order_item_meta(仅用于订单项自身的元数据)。
  2. 订单项类型过滤:添加is_type('line_item')判断,避免在运费、优惠券等非商品项上执行无效逻辑。
  3. 日期格式化:根据你的ACF字段设置调整格式——如果ACF字段设置为返回「时间戳」,则直接用date('Y-m-d H:i', $event_date);如果返回「已格式化字符串」,可直接输出或按需二次调整。
  4. 变体产品兼容:如果你的活动产品是可变产品,字段绑定在子变体上,需切换到注释里的代码获取变体ID。

排查要点

  • 确认ACF字段的键名确实是event_date_and_time(注意大小写和下划线,ACF字段键不可错)。
  • 检查目标活动产品上是否已正确填写该日期时间字段。
  • 测试HTML和纯文本两种邮件格式,确保显示正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:30:58