Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过WooCommerce中的挂钩函数对订单项进行排序_Php_Wordpress_Sorting_Woocommerce_Orders - Fatal编程技术网

Php 通过WooCommerce中的挂钩函数对订单项进行排序

Php 通过WooCommerce中的挂钩函数对订单项进行排序,php,wordpress,sorting,woocommerce,orders,Php,Wordpress,Sorting,Woocommerce,Orders,在WooCommerce中,我有一个“位置”的产品属性pa_location,用于对订单项目进行排序。当订单项目具有相同的位置时,我希望按SKU对其进行排序。因此,首先按位置排序,然后按SKU排序 我查看了“”,但我无法确定它是如何应用的,是否适用于我的函数 我有一个自定义函数,它可以按pa\u位置进行排序,但不能同时按\u sku进行排序 我试着实现参考文章中关于排序的一些示例 add_filter( 'woocommerce_order_get_items', function( $item

在WooCommerce中,我有一个“位置”的产品属性
pa_location
,用于对订单项目进行排序。当订单项目具有相同的位置时,我希望按SKU对其进行排序。因此,首先按位置排序,然后按SKU排序

我查看了“”,但我无法确定它是如何应用的,是否适用于我的函数

我有一个自定义函数,它可以按
pa\u位置
进行排序,但不能同时按
\u 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排序。现在它只是按位置排序。

尝试以下方法:

add_filter( 'woocommerce_order_get_items', function( $items, $order ) {

    uasort( $items,
        function( $a, $b ) {
            return strnatcmp( $a['pa_location'], $b['pa_location'] );
        }
    );

    uasort( $items,
        function( $a, $b ) {
            return strnatcmp( $a['_sku'], $b['_sku'] );
        }
    );

    return $items;
}, 10, 2 );

我已经为
\u sku
重新运行了
uasort()
。我还没有测试代码,但我希望,它可以为你做的工作

根据“”回答线程尝试以下操作:

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>';
这就是我们所期望的,首先排序
pa\u位置
,然后排序
\u sku

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
        )
)