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

如何在WooCommerce订单邮件通知中添加产品标签至订单项

解决WooCommerce订单邮件添加产品标签(活动地点)的问题

现有功能(课程日期)

你已经成功通过以下代码在WooCommerce订单邮件中添加了课程日期自定义字段:

/**
* Add a custom field & product tag (in an order) to the emails
*/
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) {

   $product = $item->get_product();

   if ( empty( $product ) ) {
    return false;
   }

   $date = get_field( 'course_dates', $product->get_id() );

   if ( !empty( $date ) ) {
    echo '<div style="font-size:12px;"><br>Course Date(s): '. $date .'</div>';
}

 }

错误代码的问题分析

你编写的添加产品标签的代码存在以下问题:

  • 钩子woocommerce_order_item_meta_end的回调参数不匹配:该钩子的正确参数为$item_id, $item, $order, $plain_text,但你写的是$order, $sent_to_admin, $plain_text, $email,参数顺序错误直接导致致命错误
  • 直接通过$item['product_tag']获取标签的方式错误,WooCommerce订单项对象没有这个索引,必须先获取关联的产品对象再提取标签
  • 单独注册钩子会重复遍历订单项,逻辑冗余且容易引发冲突

正确解决方案(整合课程日期与产品标签)

无需新增钩子,直接在已有函数中添加产品标签的逻辑,代码如下:

/**
* Add custom field (course dates) & product tag (location) to order emails
*/
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) {
    $product = $item->get_product();

    if ( empty( $product ) ) {
        return;
    }

    // 显示课程日期
    $date = get_field( 'course_dates', $product->get_id() );
    if ( !empty( $date ) ) {
        echo '<div style="font-size:12px;"><br>Course Date(s): '. esc_html($date) .'</div>';
    }

    // 显示产品标签(作为活动地点)
    $product_tags = wp_get_post_terms($product->get_id(), 'product_tag', array('fields' => 'names'));
    if ( !empty($product_tags) ) {
        // 多个标签用逗号分隔显示
        $location = implode(', ', $product_tags);
        echo '<div style="font-size:12px;">Location: '. esc_html($location) .'</div>';
    }
}

代码说明

  • 参数匹配:严格遵循钩子的参数顺序,避免致命错误
  • 安全输出:使用esc_html()转义输出内容,防止XSS漏洞
  • 标签处理:通过wp_get_post_terms()获取产品标签,指定product_tag分类并提取标签名称
  • 多标签兼容:如果产品关联多个标签,自动用逗号分隔显示
  • 样式统一:保持和课程日期一致的字体大小,保证邮件格式美观

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:58:36