php - 在 Woocommerce 中按 SKU 对订单商品进行排序
问题描述
我正在尝试在Woocommerce的电子邮件中的订单中按 sku 订购产品。
我对以下代码没有任何运气。
一些帮助?从现在开始感谢!
add_filter( 'woocommerce_order_get_items', function( $items, $order ) {
uasort( $items,
function( $a, $b ) {
return strnatcmp( $a['_sku'], $b['_sku'] );
}
);
return $items;
}, 10, 2 );
样本排序结果:
- 信息系统 I
- NFMUFFIN
- 花絮
- INFTAFLOR
- INFTAPINK
- CTEPINK4
- CTECAKE4
- INFCHOCO
- UCUBTOMA
解决方案
2020 年 7 月更新
这是执行此操作的方法:
add_filter( 'woocommerce_order_get_items', 'filter_order_get_items_by_sku', 10, 3 );
function filter_order_get_items_by_sku( $items, $order, $types ) {
if( count($items) > 1 ) {
$item_skus = $sorted_items = array();
// Loop through order line items
foreach( $items as $items_id => $item ){
// Check items type: for versions before Woocommerce 3.3
if( $item->is_type('line_item') && method_exists( $item, 'get_product' ) ){
$product = $item->get_product(); // Get the product Object
if( is_a( $product, 'WC_Product' ) ) {
$item_skus[$product->get_sku()] = $items_id;
}
}
}
// Only for line items when our sku array is not empty
if( ! empty($item_skus) ) {
// Sorting in ASC order based on SKUs;
ksort($item_skus); // or use krsort() for DESC order
// Loop through sorted $item_skus array
foreach( $item_skus as $sku => $item_id ){
// Set items in the correct order
$sorted_items[$item_id] = $items[$item_id];
}
$items = $sorted_items;
}
}
return $items;
}
代码位于您的活动子主题(或活动主题)的 function.php 文件中。测试和工作。
这将在后端和前端订单以及电子邮件通知中按 sku 订单 ASC 对项目进行排序
此外,在将数据保存到数据库之前下订单后对项目进行排序,这可能是一种更好的方法。
推荐阅读
- python - 在类构造函数中表达同级嵌套类的类型提示
- system-verilog - 是否可以在 SystemVerilog 中不同的其他 case 语句中包含的 case 语句中使用相同的表达式?
- angular - 重复识别的“IteratorResult”
- java - 冒泡排序二维数组按字母顺序Java
- huawei-mobile-services - 华为地图突然无法加载崩溃
- javascript - Redux api 状态未在 nextjs 中更新
- javascript - 我可以使外部参数与内部参数相同吗?
- html - 尝试预填充表单以编辑包含图像文件字段的产品 - html、ejs、Nodejs、Expressjs
- php - Wordpress 分页只显示相同的帖子
- nunit - Teamcity 在服务消息“importData”中给出错误未知数据处理器类型“typeID”