Корзина Woocommerce - сортировка по категориям - PullRequest
0 голосов
/ 14 апреля 2020

Мне нужна помощь. Я хочу отсортировать продукт в своей корзине по категориям следующим образом:

Категория1

  • Продукт1
  • Продукт2
  • Продукт3

Категория2

  • Продукт1
  • Продукт2
  • Продукт3

Категория3

  • Продукт1
  • Product2
  • Product3

Я нашел этот код, но он работает странно. Для некоторых товаров сортировка в порядке, а для других - нет. Не могли бы вы помочь мне?

add_action( 'woocommerce_cart_loaded_from_session', function() {

    global $woocommerce;
    $products_in_cart = array();
    foreach ( $woocommerce->cart->cart_contents as $key => $item ) {
        $terms = wp_get_post_terms($item['data']->id, 'product_cat' );
        $products_in_cart[ $key ] = $terms[0]->name;
    }

    ksort( $products_in_cart );

    $cart_contents = array();
    foreach ( $products_in_cart as $cart_key => $product_title ) {
        $cart_contents[ $cart_key ] = $woocommerce->cart->cart_contents[ $cart_key ];
    }
    $woocommerce->cart->cart_contents = $cart_contents;

}, 100 );```

1 Ответ

1 голос
/ 14 апреля 2020

Вам также нужно установить новый сеанс корзины, и вы также можете использовать свойство $cart, переданное в действие:

(хотя я не проверял эту идею, пожалуйста, попробуйте)

add_action( 'woocommerce_cart_loaded_from_session', function($cart) {

   $products_in_cart = array();

   foreach ( $cart->get_cart() as $key => $item ) {
       $terms = wp_get_post_terms($item['data']->get_id(), 'product_cat' );
       $products_in_cart[ $key ] = $terms[0]->name;
   }

   asort( $products_in_cart );

   $cart_contents = array();
   foreach ( $products_in_cart as $cart_key => $product_title ) {
       $cart_contents[ $cart_key ] = $cart->cart_contents[ $cart_key ];
   }

   $cart->set_cart_contents($cart_contents);
   $cart->set_session();

}, 100, 1 );

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...