Wordpress 按类别对购物车进行排序

Wordpress 按类别对购物车进行排序,wordpress,woocommerce,Wordpress,Woocommerce,我已经找到了按字母顺序对收银台进行排序的代码片段。这是完美的,但正如前面提到的,我尝试按类别对我的产品进行分类和分组 有没有人可以修改下面的代码片段,使其按类别对产品进行排序 add_操作('woocommerce_cart_loaded_from_session'、'bbloomer_sort_cart_items_字母顺序”); 函数bbloomer\u sort\u cart\u items\u按字母顺序(){ 全球商业; //阅读购物车项目 $products_in_cart=arra

我已经找到了按字母顺序对收银台进行排序的代码片段。这是完美的,但正如前面提到的,我尝试按类别对我的产品进行分类和分组

有没有人可以修改下面的代码片段,使其按类别对产品进行排序

add_操作('woocommerce_cart_loaded_from_session'、'bbloomer_sort_cart_items_字母顺序”);
函数bbloomer\u sort\u cart\u items\u按字母顺序(){
全球商业;
//阅读购物车项目
$products_in_cart=array();
foreach($woocommerce->cart->cart\u内容为$key=>$item){
$products_in_cart[$key]=$item['data']->get_title();
}
//分类购物车项目
natsort($products\u in\u cart);
//将已排序的项目分配给购物车
$cart_contents=array();
foreach($products\U作为$cart\U key=>$product\U title出现在购物车中){
$cart_contents[$cart_key]=$woocommerce->cart->cart_contents[$cart_key];
}
$WOOMerce->cart->cart\u contents=$cart\u contents;

}
您应该能够使用类
WC\u产品中定义的方法
get\u category\u ids()
访问类别ID

$item['data']->get_category_ids()
但是这会返回一个
数组
,因此需要处理获取id的问题,例如

$ids = $item['data']->get_category_ids();
$id  = $ids[ 0 ];
和转换为字符串,例如

$term_obj = get_term( $id, 'product_cat' );
$name     = $term_obj->name;
然后你就可以做了

$products_in_cart[ $key ] = $name;
按照问题代码中使用的相同逻辑,按类别排序

有很多事情要考虑,这不处理多个类别的项目,它只使用索引0得到第一个。此外,如果同一类别中有多个产品,则没有额外的排序逻辑


请注意,这是未经测试的,只是一种处理方法的想法。

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

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

非常感谢你!那很好用。进行分类的原因是,我们希望以“按类别订购”的方式挑选商店中的商品,我认为,当购物车按类别进行分类时,订单确认邮件也会自动按类别进行排序。您是否也有一个按类别对确认邮件进行排序的代码片段?