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

WooCommerce后台订单商品自定义价格及税费字段添加求助

WooCommerce后台订单商品添加自定义计算字段解决方案

问题1:添加「商品小计+运费」字段

原代码存在三个关键问题:

  1. 未正确调用wc_price()函数,仅写了函数名而非执行调用
  2. 未获取当前订单对象,无法计算小计与运费总和
  3. HTML输出未做安全转义处理

修正后的完整代码:

// 添加自定义表头
add_action('woocommerce_admin_order_item_headers', 'add_order_item_total_shipping_header');
function add_order_item_total_shipping_header() {
    $column_name = '小计+运费';
    echo '<th>' . esc_html($column_name) . '</th>';
}

// 添加自定义字段值
add_action('woocommerce_admin_order_item_values', 'add_order_item_total_shipping_value', 10, 3);
function add_order_item_total_shipping_value($_product, $item, $item_id) {
    // 仅针对商品行项显示
    if ($item->get_type() !== 'line_item') return;
    
    // 通过订单行项获取订单对象
    $order = $item->get_order();
    if (!$order) return;
    
    // 计算小计+运费的总和
    $total = $order->get_subtotal() + $order->get_shipping_total();
    // 格式化价格
    $formatted_total = wc_price($total, array('currency' => $order->get_currency()));
    
    echo '<td>' . $formatted_total . '</td>';
}

问题2:添加「含运费的总税费」字段

原代码核心问题:get_tax_totals()返回的是税费类型数组(而非数值),无法直接传入wc_price(),需计算所有税费(商品税+运费税)的总和。

修正后的完整代码:

// 添加税费表头
add_action('woocommerce_admin_order_item_headers', 'add_order_item_total_tax_header');
function add_order_item_total_tax_header() {
    $column_name = '总税费(含运费)';
    echo '<th>' . esc_html($column_name) . '</th>';
}

// 添加税费字段值
add_action('woocommerce_admin_order_item_values', 'add_order_item_total_tax_value', 10, 3);
function add_order_item_total_tax_value($_product, $item, $item_id) {
    // 仅针对商品行项显示
    if ($item->get_type() !== 'line_item') return;
    
    // 通过订单行项获取订单对象
    $order = $item->get_order();
    if (!$order) return;
    
    // 计算所有税费总和(商品税+运费税)
    $total_tax = $order->get_total_tax();
    // 格式化价格
    $formatted_tax = wc_price($total_tax, array('currency' => $order->get_currency()));
    
    echo '<td>' . $formatted_tax . '</td>';
}

关键修正说明

  • 改用$item->get_order()获取订单对象,比get_the_ID()更可靠,避免页面上下文冲突
  • 使用$item->get_type()替代$item['type'],符合WooCommerce面向对象API规范
  • 对表头文本使用esc_html()做转义,提升代码安全性
  • 税费计算直接调用get_total_tax(),该方法已包含商品税和运费税总和,无需手动遍历数组

内容的提问来源于stack exchange,提问作者Victor Daniel Witoszek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:34:58