如何仅在WooCommerce后台订单列表修改订单显示总额
解决WooCommerce后台订单列表自定义总额显示需求
针对订单原总额为R$65时,后台显示实际到账R$64,36、前台用户端保持原金额R$65的需求,可通过以下代码实现:
// 自定义后台订单列表的总额显示 add_action( 'manage_shop_order_posts_custom_column', 'custom_admin_order_total_display', 20, 2 ); function custom_admin_order_total_display( $column, $post_id ) { if ( $column !== 'order_total' ) return; $order = wc_get_order( $post_id ); if ( ! $order ) return; $original_total = (float) $order->get_total(); // 判断原订单总额为65雷亚尔时替换显示金额 if ( $original_total === 65.00 ) { echo wc_price( 64.36, [ 'currency' => 'BRL' ] ); } else { echo $order->get_formatted_order_total(); } } // 强制前台用户订单列表保留原始总额 add_filter( 'woocommerce_get_order_item_totals', 'preserve_frontend_order_total', 10, 3 ); function preserve_frontend_order_total( $total_rows, $order, $tax_display ) { if ( is_admin() ) return $total_rows; if ( isset( $total_rows['order_total'] ) ) { $total_rows['order_total']['value'] = $order->get_formatted_order_total(); } return $total_rows; }
代码说明
- 第一个钩子
manage_shop_order_posts_custom_column仅作用于后台订单列表,精准定位order_total列,当原订单总额为65.00时,输出预先设定的实际到账金额,其他金额保持默认显示。 - 第二个钩子
woocommerce_get_order_item_totals确保前台用户端的订单总额始终显示原始值,避免后台修改逻辑影响用户视角。 - 金额格式化使用WooCommerce内置的
wc_price函数,自动匹配后台设置的巴西雷亚尔货币格式(逗号作为小数分隔符)。
注意事项
- 代码可添加至当前主题的
functions.php文件末尾,或使用Code Snippets等自定义代码插件(推荐后者,避免主题更新丢失代码)。 - 若需扩展其他金额的替换规则,只需修改
$original_total === 65.00的判断条件,例如添加|| $original_total === X.XX即可。
内容的提问来源于stack exchange,提问作者lummion
相关产品推荐
相关产品推荐

