Woocommerce购物车-按类别排序



我需要帮助。我想在我的购物车页面中按类别对prodyct进行排序,如下所示:

类别1

  • 产品1
  • 产品2
  • 产品3

类别2

  • 产品1
  • 产品2
  • 产品3

类别3

  • 产品1
  • 产品2
  • 产品3

我发现了这个代码,但它的工作方式很奇怪。对于一些产品,它可以分类,但对于其他产品,不能。你能帮我吗?

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

您还需要设置新的购物车会话,还可以使用传递到操作中的$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 );

最新更新