我正在尝试对 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'] );
}
如有任何帮助,我们将不胜感激。
我确实找到了另一个解决方案。它返回排序后的数组,但不知何故,订单中的项目没有被排序:
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;
有什么建议吗?