php - 通过 WooCommerce 中的挂钩功能对订单项目进行排序
问题描述
在 WooCommerce 中,我有一个pa_location
“位置”的产品属性,我用它对我的订单商品进行排序。当订单商品的位置相同时,我想按 SKU 对它们进行排序。因此,首先按位置排序,然后按 SKU。
我查看了“ PHP usort 对多个字段进行排序”,但我无法弄清楚它是如何应用的,并且适用于我的函数。
我有这个自定义函数可以按 排序pa_location
,但不能让它也按 排序_sku
。
我尝试在有关排序的参考文章中实现一些示例。
add_filter( 'woocommerce_order_get_items', function( $items, $order ) {
uasort( $items,
function( $a, $b ) {
return strnatcmp( $a['pa_location'], $b['pa_location'] );
}
);
return $items;
}, 10, 2 );
我希望使用此功能按位置然后按 SKU 排序。现在它只是按位置排序。
解决方案
根据“ PHP usort sorting multiple fields ”答案线程尝试以下操作:
add_filter( 'woocommerce_order_get_items', 'filter_order_get_items_callback', 10, 2 );
function filter_order_get_items_callback( $items, $order ) {
uasort( $items,
function( $a, $b ) {
if( $a['pa_location'] == $b['pa_location'] ) {
return strcmp( $a['_sku'], $b['_sku'] );
}
return strnatcmp( $a['pa_location'], $b['pa_location'] );
}
);
return $items;
}
测试:
$items = array (
0 => array ( 'pa_location' => 'Marseille',
'_sku' => '27458C' ),
1 => array ( 'pa_location' => 'Nice',
'_sku' => '32458A' ),
2 => array ('pa_location' => 'Cannes',
'_sku' => '35C7L5' ),
3 => array ('pa_location' => 'Marseille',
'_sku' => '387B85'),
4 => array ( 'pa_location' => 'Cannes',
'_sku' => '25A587' )
);
uasort( $items, function( $a, $b ) {
if( $a['pa_location'] == $b['pa_location'] ) {
return strcmp( $a['_sku'], $b['_sku'] );
}
return strnatcmp( $a['pa_location'], $b['pa_location'] );
} );
// Raw output
echo '<pre>'; print_r( $items ); echo '<pre>';
我们得到这个输出:
Array
(
[2] => Array
(
[pa_location] => Cannes
[_sku] => 25A587
)
[4] => Array
(
[pa_location] => Cannes
[_sku] => 35C7L5
)
[0] => Array
(
[pa_location] => Marseille
[_sku] => 27458C
)
[3] => Array
(
[pa_location] => Marseille
[_sku] => 387B85
)
[1] => Array
(
[pa_location] => Nice
[_sku] => 32458A
)
)
这是我们所期望的,先排序pa_location
后排序_sku
。
推荐阅读
- swift - 将控制器初始化为初始状态
- r - 当单词包含句点/点“。”时,Sublime Text 4 自动完成
- swift - UICollectionViewCompositionalLayout 可以支持手动计算高度(或宽度)吗?
- azure - 使用二头肌输出新创建的功能应用键
- javascript - 每次点击改变背景
- android - 当 Jetpack Compose 中变量的 MutableState 发生变化时,有没有办法执行函数调用
- reactjs - 防止重新渲染未受影响的子组件
- html - 放置外部 css 文件的最佳位置在哪里(性能方面)?
- delphi - 尝试使用 EnumFontFamiliesEx 在 Windows 64 位平台上枚举字体时收到访问冲突
- iis - 当我尝试使用 % 符号表示文件或目录不存在的 url 时,IIS url 会写入吗?