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

如何在WooCommerce「我的账户」订单表格中显示商品SKU

解决方案:修改WooCommerce订单总计列显示商品SKU

我明白你的需求——因为店铺限制一次只能购买一种商品,你想把订单总计列的“X for Y items”改成“X for Y [SKU]”。你之前用的ngettext过滤器确实能修改文本,但它最大的问题是拿不到订单的SKU数据,因为这个过滤器只负责字符串翻译,不传递订单上下文。

下面给你一个可行的解决方案,用WooCommerce专属钩子实现,既能修改文本,又能获取到商品SKU:

add_action('woocommerce_my_account_my_orders_column_order-total', 'custom_order_total_column_with_sku', 10, 1);
function custom_order_total_column_with_sku($order) {
    // 获取订单中的所有商品(因限制一次只买一种,直接取第一个即可)
    $items = $order->get_items();
    $item = reset($items);
    
    // 获取商品SKU,兼容商品已删除的情况
    $product = $item->get_product();
    $sku = $product ? $product->get_sku() : '';
    
    // 获取订单格式化后的总计金额和商品数量
    $total = $order->get_formatted_order_total();
    $item_count = $order->get_item_count();
    
    // 构建最终显示文本
    $display_text = sprintf('%1$s for %2$s %3$s', $total, $item_count, $sku);
    
    // 输出修改后的内容
    echo $display_text;
}

代码说明:

  • 钩子选择:woocommerce_my_account_my_orders_column_order-total是专门用于修改“我的账户”页面订单总计列的钩子,会直接传递$order对象,让我们能获取订单的所有数据。
  • SKU获取逻辑:因为你限制一次只买一种商品,所以用reset($items)直接取第一个商品;同时做了兼容处理,如果商品已被删除,会显示空字符串避免报错。
  • 文本格式化:用sprintf拼接内容,保留了WooCommerce原生的金额格式化样式,完美替换“items”为对应SKU。

为什么原来的代码行不通?

你之前用的ngettext是WordPress的通用翻译钩子,它只接收翻译文本、原文本和域名三个参数,完全没有订单上下文,根本无法获取到SKU这类订单专属数据。必须使用能访问订单对象的WooCommerce钩子才能实现需求。

内容的提问来源于stack exchange,提问作者Emmanuel Kuebu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:57:42