根据SKU在后端对订单排序

时间:2020-07-18 11:06:10

标签: wordpress sorting woocommerce hook

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

我尝试了所有这些代码: Sort order items by SKU in Woocommerce admin order pages
Sorting order items via a hooked function in WooCommerce
Sorting order items by SKU in Woocommerce email notifications

底层代码正在按名称排序。

=

但是当更改为_sku / 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;
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:-1)

我确实找到了另一种解决方案。它返回已排序的数组,但是不知该命令中的项目没有被排序:

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;

有什么建议吗?

相关问题