首页 > 解决方案 > 后台根据SKU排序订单

问题描述

我正在尝试对 sku 手动添加的订单进行排序。

我已经尝试了所有这些代码: 在 Woocommerce 管理订单页面中按 SKU
对订单项目进行排序 通过 WooCommerce 中的挂钩功能
对订单项目进行排序 在 Woocommerce 电子邮件通知中按 SKU 对订单项目进行排序

下面的代码正在按名称排序。

add_filter('woocommerce_order_status_changed', 'sortOrderItemsSKU', 10, 2);
function sortOrderItemsSKU($items, $order) {
    uasort( $items,
        function( $a, $b ) {
            return strcmp( $a['name'], $b['name'] );
        }
    );
    return $items;
}

但是当更改为 _sku / sku 时都不起作用。

function( $a, $b ) {
    return strcmp( $a['_sku'], $b['_sku'] );
}

任何帮助表示赞赏。

标签: wordpresssortingwoocommercehook

解决方案


我确实找到了另一个解决方案。它返回排序后的数组,但不知何故,订单中的项目没有被排序:

add_action( 'woocommerce_order_status_changed', 'process_offline_order', 10, 4 );
function process_offline_order( $order_id, $items, $order, $types = 'line_item' ){
            
    $order = new WC_Order( $order_id ); 
    $items = $order->get_items(); 
    
    $item_skus = $sorted_items = array();

    foreach ( $items as $item_id => $item ) {
        
        $product = wc_get_product( $item['product_id'] );
        $product_id = $item->get_variation_id() ? $item->get_variation_id() : $item->get_product_id();
                    
        $product = $item->get_product(); 
        $item_skus[$product->get_sku()] = $item_id;
        
    }
    
    ksort($item_skus);

    foreach( $item_skus as $keyL => $valueL ){
        $sorted_items[$keyL] = $items[$keyL];
        $sorted_items[$valueL] = $items[$valueL];
    }

    return $item_skus;
}

所以问题可能出在这部分:

foreach( $item_skus as $keyL => $valueL ){
    $sorted_items[$keyL] = $items[$keyL];
    $sorted_items[$valueL] = $items[$valueL];
}   
return $item_skus;

有什么建议么?


推荐阅读