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

WooCommerce订单邮件按SKU排序商品失败,寻求技术支持

解决WooCommerce订单邮件商品按SKU排序的问题

嘿,我看你尝试给WooCommerce订单邮件里的商品按SKU排序,但之前的代码没生效,我来帮你搞定这个问题~

原代码的问题所在

你之前的代码里直接用$a['_sku']来获取SKU是不对的——WooCommerce返回的订单商品项$items里的每个元素都是WC_Order_Item_Product对象,不是数组,所以没法直接用数组下标访问属性。

修正后的代码

直接用这段代码替换你原来的,就能实现按SKU自然排序的需求:

add_filter( 'woocommerce_order_get_items', function( $items, $order ) {
    // 仅在订单邮件场景生效,避免影响后台/前端的订单商品展示顺序
    if ( ! is_wc_endpoint_url() && did_action('woocommerce_email_before_order_table') ) {
        uasort( $items, function( $a, $b ) {
            // 获取商品对象,再提取SKU;处理商品已删除的情况,默认空字符串
            $sku_a = $a->get_product() ? $a->get_product()->get_sku() : '';
            $sku_b = $b->get_product() ? $b->get_product()->get_sku() : '';
            // 自然排序,符合你给出的示例顺序逻辑
            return strnatcmp( $sku_a, $sku_b );
        } );
    }
    return $items;
}, 10, 2 );

关键说明

  • 对象属性访问:通过$a->get_product()拿到对应的商品对象,再用get_sku()方法获取SKU,这是WooCommerce官方推荐的正确方式
  • 场景限制:加了条件判断,只在订单邮件生成时触发排序,不会打乱后台订单编辑页、用户前端订单详情页的商品原始顺序
  • 容错处理:考虑了商品可能被删除的情况,给不存在的商品设置空SKU,避免代码报错

你可以下个测试订单,看看收到的邮件里商品是不是按照你想要的INFSTRAW → NFMUFFIN → INFFLORES → INFTAFLOR → INFTAPINK → CTEPINK4 → CTECAKE4 → INFCHOCO → UCUBTOMA顺序排列啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:48:14