如何将WooCommerce订单详情Discount字段移至Shipping下方并同步至邮件
子主题实现WooCommerce折扣字段移至运费下方(同步适配邮件通知)
实现思路
完全不需要逐行检索WooCommerce插件目录下的折扣相关文件做硬改。WooCommerce 3.0版本之后,所有订单详情、邮件通知内的总计区块,都是通过统一的woocommerce_order_totals_rows钩子逐行输出内容,只需要调整原生字段的钩子挂载顺序,就能同时让所有调用该渲染逻辑的前台页面、后台页面、通知邮件同步生效,不需要单独复制、修改各场景的模板文件。
默认状态下该钩子上的字段挂载优先级为:
- 折扣行(Discount):优先级10
- 运费行(Shipping):优先级20
- 税费行(Tax):优先级30
- 订单总计行(Total):优先级40
要实现折扣行移动到运费行下方,只需要把原优先级10的折扣行从钩子上移除,重新挂载到优先级21的位置,即可刚好排在优先级20的运费行后面。
代码操作
将以下代码完整写入子主题根目录的functions.php文件末尾即可:
// 调整订单总计行显示顺序:将折扣行移至运费行下方 add_action( 'init', function() { // 移除默认位置的折扣行(适配WooCommerce 7.0及以上版本) remove_action( 'woocommerce_order_totals_rows', array( 'WC\Order\Orders\OrderTotals', 'display_discount_row' ), 10 ); // 重新挂载折扣行到运费行的下一渲染位置 add_action( 'woocommerce_order_totals_rows', array( 'WC\Order\Orders\OrderTotals', 'display_discount_row' ), 21 ); } );
版本兼容说明:如果使用WooCommerce 7.0以下的旧版本,将上述代码中的类方法
array( 'WC\Order\Orders\OrderTotals', 'display_discount_row' )替换为全局函数'wc_display_discount_row'即可,优先级参数保持不变。
生效覆盖范围
代码写入后无需额外修改其他文件,以下场景会自动同步为调整后的顺序:
- 前台用户端「我的账户」板块的订单详情区块
- WooCommerce后台的订单编辑页面总计区块
- 所有WooCommerce默认触发的通知邮件(新订单通知、订单处理完成通知、客户收货通知等)内的订单详情区块
异常排查
如果代码写入后字段顺序没有变化,无需返回插件目录搜索对应文件,只需检查当前网站的主题、第三方结算插件是否自定义过订单总计的钩子逻辑,通过调试工具查看woocommerce_order_totals_rows钩子上的实际回调和优先级,对应调整折扣行重新挂载的优先级数值即可。该操作只调整输出节点的顺序,不会改动原有金额计算、字段样式的逻辑。
内容的提问来源于stack exchange,提问作者mjune
相关产品推荐
相关产品推荐

