WooCommerce邮件模板中替换Shipping标签的方法咨询
修改WooCommerce邮件模板中的“Shipping”标签的两种方案
嘿,我完全懂你修改WooCommerce邮件时的那种头疼——操作繁琐还找不到地方,尤其是这种藏在翻译系统里的标签。针对你的问题,我给你两种可行的思路,优先推荐钩子方案,毕竟不会因为WooCommerce更新而丢失修改:
方案一:使用过滤器钩子(推荐,无需修改核心文件)
WooCommerce的大部分文本都是通过翻译函数输出的,所以我们可以用gettext过滤器来精准替换邮件里的“Shipping”标签,还能避免全局替换影响其他地方。
把下面的代码添加到你的主题functions.php文件里,或者自定义插件中:
add_filter( 'gettext', 'custom_woocommerce_shipping_label_in_emails', 20, 3 ); function custom_woocommerce_shipping_label_in_emails( $translated_text, $text, $domain ) { // 只针对WooCommerce的文本域,并且只在邮件场景下替换 if ( is_email() && 'woocommerce' === $domain ) { if ( 'Shipping' === $text ) { $translated_text = '你的自定义配送标签'; // 替换成你想要的文本 } } return $translated_text; }
如果上面的is_email()判断不够精准,你还可以结合邮件的特定动作钩子,在邮件渲染时精准替换:
add_action( 'woocommerce_email_order_details', 'custom_replace_shipping_label_in_email', 5 ); function custom_replace_shipping_label_in_email( $order ) { ob_start(); } add_action( 'woocommerce_email_order_details', 'custom_output_modified_shipping_label', 20 ); function custom_output_modified_shipping_label( $order ) { $email_content = ob_get_clean(); // 替换邮件内容里的Shipping文本 $email_content = str_replace( 'Shipping', '你的自定义配送标签', $email_content ); echo $email_content; }
方案二:重载邮件模板文件(适合需要深度修改模板的场景)
如果你不仅要改标签,还要调整邮件布局,可以用WooCommerce的模板重载功能,这样修改不会被核心更新覆盖:
- 找到WooCommerce插件目录下的邮件模板文件,比如涉及订单详情的
wp-content/plugins/woocommerce/templates/emails/email-order-details.php - 把这个文件复制到你的主题目录下的
woocommerce/emails/文件夹里(如果没有就新建对应目录) - 打开复制后的文件,找到类似下面的代码:
直接把<?php esc_html_e( 'Shipping', 'woocommerce' ); ?>'Shipping'替换成你想要的文本,比如'自定义配送'
为什么你之前找不到PHP文件里的“Shipping”?
因为WooCommerce遵循WordPress的国际化标准,大部分文本都是通过__()或_e()翻译函数输出的,直接搜“Shipping”字符串可能找不到——它是作为翻译参数存在的,而不是硬编码在文件里的。
内容的提问来源于stack exchange,提问作者user2812779
相关产品推荐
相关产品推荐

