Обычно, когда мы говорим о какой-либо сортировке в WordPress, неважно – записей или товаров, мы всегда начинаем подразумевать хук pre_get_posts
.
Хотите лучше разбираться в WooCommerce? Рекомендую ознакомиться с моим видеокурсом по этой ссылке.
Однако в корзине WooCommerce ситуация совсем другая – товары лежат в массиве WC()->cart->cart_contents
, в том порядке, в котором они туда были добавлены. А это значит, что всё, что нам понадобится – это обычные PHP-функции сортировки массива, вы можете выбрать на выбор одну из:
sort()
– тупо сортирует по алфавиту по возрастанию (A-Z).natsort()
– позволяет задать более натуральный порядок, например после product1 будет идти product2, а не product10, более подробно можете прочекать в официальной документации.Саму сортировку будем осуществлять в экшн-хуке woocommerce_cart_loaded_from_session
, код же можете вставить либо в functions.php
текущей или дочерней темы.
add_action( 'woocommerce_cart_loaded_from_session', 'truemisha_sort_cart_alphabetically', 25 ); function truemisha_sort_cart_alphabetically() { // создадим отдельный массив с товарами из корзины, который и будем сортировать $products_to_sort = array(); // этот же массив по структуре совпадает с массивом товаров из корзины, он понадобится позже $cart_contents = array(); // заполняем первый массив, который нужен только для сортировки foreach ( WC()->cart->get_cart_contents() as $key => $item ) { $products_to_sort[ $key ] = $item['data']->get_title(); } // сортируем sort( $products_to_sort ); // или natsort( $products_to_sort ) // заполяем массив товаров корзины foreach( $products_to_sort as $cart_key => $product_title ) { $cart_contents[ $cart_key ] = WC()->cart->cart_contents[ $cart_key ]; } WC()->cart->cart_contents = $cart_contents; // сохраняем назад }
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.