首页 > 解决方案 > 按类别对 WooCommerce 购物车进行排序

问题描述

我已经找到了一个按字母顺序对结帐购物车进行排序的片段。这很完美,但如前所述,我尝试按类别对我的产品进行分类和分组。

有没有人可以调整以下代码段,以便按类别对产品进行排序?

add_action( 'woocommerce_cart_loaded_from_session', 'bbloomer_sort_cart_items_alphabetically' );
 
function bbloomer_sort_cart_items_alphabetically() {
     
   global $woocommerce;
    
   // READ CART ITEMS
   $products_in_cart = array();
   foreach ( $woocommerce->cart->cart_contents as $key => $item ) {
      $products_in_cart[ $key ] = $item['data']->get_title();
   }
    
   // SORT CART ITEMS
   natsort( $products_in_cart );
    
   // ASSIGN SORTED ITEMS TO 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;
    
}

标签: wordpresswoocommerce

解决方案


为了按类别对购物车商品进行分组,请添加以下代码片段 -

function woocommerce_before_cart_contents(){
    global $woocommerce;
    $cat_wisw_pros = array();
    foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $cart_item ) {
        $product_id = $cart_item['product_id'];
        $cat_ids = wp_get_post_terms( $product_id, 'product_cat', array( 'fields' => 'ids' ) );
        foreach ( $cat_ids as $id ) {
            $cat_wisw_pros[$id][$cart_item_key] = $cart_item;
        }
    }
    ksort( $cat_wisw_pros ); // Cat ID wise sort
    $grouped_cart_items = array();
    foreach ( $cat_wisw_pros as $cat_id => $cart_items ) {
        foreach ( $cart_items as $cart_item_key => $cart_item ) {
            if( !array_key_exists( $cart_item_key, $grouped_cart_items ) )
                $grouped_cart_items[$cart_item_key] = $cart_item;
        }
    }
    $woocommerce->cart->cart_contents = $grouped_cart_items;
}

add_action( 'woocommerce_before_cart_contents', 'woocommerce_before_cart_contents' );

推荐阅读