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

如何在WooCommerce订单邮件中用自定义元数据替换带HTML的长产品标题

解决WooCommerce订单邮件中替换产品名称为自定义元数据的问题

我完全懂你现在的困扰——为了适配Essential Grid的灯箱展示需求,不得不给产品设置带HTML标签的长标题,结果这个标题跑到订单邮件里打乱了排版,而且你已经搞定了迷你购物车的修复,就差邮件这最后一步了。

下面是针对性的解决方案,用WooCommerce的钩子精准替换邮件中的产品名称:

核心代码实现

这段代码会拦截订单邮件里的产品名称,用你自定义的simple_title元数据来替换:

add_filter( 'woocommerce_order_item_name', 'replace_order_item_name_with_custom_meta', 10, 3 );
function replace_order_item_name_with_custom_meta( $item_name, $item, $is_visible ) {
    // 仅在WooCommerce邮件场景下执行替换,避免影响其他页面
    if ( did_action( 'woocommerce_email_before_order_table' ) || did_action( 'woocommerce_email_order_items' ) ) {
        // 获取当前订单关联的产品对象
        $product = $item->get_product();
        
        if ( $product ) {
            // 获取你自定义的simple_title元数据
            $custom_title = $product->get_meta( 'simple_title' );
            
            // 如果自定义标题存在,就替换掉原标题,同时做安全处理
            if ( ! empty( $custom_title ) ) {
                $item_name = wp_kses_post( $custom_title );
            }
        }
    }
    
    return $item_name;
}

代码细节说明

  • 钩子选择:用woocommerce_order_item_name这个核心钩子,它负责输出订单中每个商品的名称,覆盖邮件、前端订单页等场景。
  • 场景限制:通过did_action()判断当前是否处于邮件模板渲染流程,确保只修改邮件内容,不会干扰你已经修复好的迷你购物车或其他页面展示。
  • 安全处理:用wp_kses_post()过滤自定义标题,防止潜在的HTML注入风险,保证邮件内容的安全性和整洁性。

使用步骤

  1. 把这段代码添加到当前主题的functions.php文件末尾,或者创建一个简单的自定义插件来存放代码(更推荐后者,避免主题更新导致代码丢失)。
  2. 确认你的自定义元数据键名是simple_title,如果不是,把代码里的'simple_title'替换成你实际使用的键名。
  3. 测试验证:下一个测试订单,查看收到的订单邮件,产品名称应该已经替换成你设置的简洁标题了。

如果某些邮件模板没生效,可以检查一下是否使用了自定义邮件模板——如果是,需要确保模板里调用了apply_filters( 'woocommerce_order_item_name', ... )钩子,默认WooCommerce邮件模板都是支持这个钩子的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:17:17