WooCommerce订单邮件中™(™)符号显示为图片的解决求助
解决WooCommerce订单邮件中™符号显示为图片的问题
这个问题我之前帮不少开发者处理过,核心原因通常是WooCommerce或第三方主题/插件对邮件内容做了额外的转义或自动转换(比如把特殊符号替换成表情图片)。你直接替换实体没生效,大概率是因为内容在邮件生成过程中被二次处理了。给你几个逐步排查和解决的方案:
方案一:用钩子强制在邮件中修正符号
最稳妥的方式是通过WooCommerce的过滤钩子,专门针对邮件环境处理产品名称。把下面的代码添加到你的主题functions.php文件里,或者用Code Snippets插件来管理(避免主题更新丢失代码):
add_filter( 'woocommerce_order_item_name', 'fix_trademark_symbol_in_emails', 10, 3 ); function fix_trademark_symbol_in_emails( $item_name, $item, $is_visible ) { // 只在邮件场景下执行(排除前端订单详情页) if ( ! is_wc_endpoint_url() && is_email() ) { // 覆盖所有可能的错误形式:原实体、被转义的实体、被替换成的图片标签 $item_name = preg_replace( array( '/&#x2122;/', '/<img[^>]*alt="™"[^>]*>/i' ), '™', $item_name ); } return $item_name; }
这个函数会在邮件生成时,把被转义的&#x2122;还原成™,同时把可能被替换成的图片标签也换回正确的实体符号。
方案二:排查第三方插件/主题的干扰
有时候是主题或插件的自动转换功能搞的鬼,比如一些富文本编辑器插件、表情替换插件,甚至某些邮件美化插件。你可以:
- 临时切换到WooCommerce官方默认主题Storefront,测试订单邮件是否正常
- 禁用所有非WooCommerce的插件,逐个重新启用,找到触发问题的插件
- 如果找到是某个插件导致的,可以查看该插件的设置,是否有“自动转换特殊字符”或“表情替换”的开关,把它关掉
方案三:尝试替换为十进制实体或直接输入符号
十六进制的™有时候会被某些转义逻辑影响,你可以试试:
- 把产品标题里的
™替换成十进制的实体™ - 或者直接在产品标题里输入
™符号(确保你的网站数据库和页面编码都是UTF-8,避免乱码)
方案四:直接修改邮件模板(进阶)
如果上面的方法都不行,你可以直接修改WooCommerce的邮件模板:
- 复制WooCommerce插件目录下的
templates/emails/email-order-items.php文件 - 粘贴到你的主题目录下的
woocommerce/emails/文件夹里(如果没有就新建) - 在模板中找到输出产品名称的代码段,通常是:
echo wp_kses_post( apply_filters( 'woocommerce_order_item_name', $item->get_name(), $item, false ) ); - 修改为:
$fixed_name = str_replace( '&#x2122;', '™', $item->get_name() ); echo wp_kses_post( apply_filters( 'woocommerce_order_item_name', $fixed_name, $item, false ) );
这样直接在模板层面处理转义问题,绕过可能的二次过滤。
内容的提问来源于stack exchange,提问作者Demian
相关产品推荐
相关产品推荐

