Hola, estamos tratando de ordenar Woo Cart por categoría de producto principal y enumerar los productos en esa categoría. Como abajo:
Piezas de rueda
- radios 12
- Neumáticos
Cuadro
- Marco Y
- Marco X
- Marco Z
Asiento
- Asiento 1
- Asiento 2
Hemos logrado mostrar por orden de gato, pero no los está ordenando en Main Cat -> Sub Cat
Tenemos el siguiente código e intentamos ordenar la matriz de carritos por gato y gato secundario
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;
}
natsort( $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 );
¿Alguien tiene alguna idea, por favor?
raju_odi
Su código era correcto pero acababa de natsort
que devolver 1 está causando el problema. También debe ordenar las categorías por orden de menú. Por favor, compruebe que el siguiente código funciona perfectamente.
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]->term_id;
}
// $categories = get_terms( 'product_cat', 'orderby=menu_order&hide_empty=1' );
asort($products_in_cart);
$cat_array = array();
foreach ($products_in_cart as $key => $value) {
$cat_array[$key] =get_term_by('id', $value, 'product_cat');
}
$mai_cat = [];
$i=0;
foreach ($cat_array as $parent_key => $parent_value) {
if($parent_value->parent == 0)
{
$mai_cat[$parent_key] = $parent_value->term_id;
foreach ($cat_array as $parent_key_sub => $parent_value_sub) {
if($parent_value_sub->parent == $parent_value->term_id)
{
$mai_cat[$parent_key_sub] = $parent_value_sub->term_id;
}
}
}
}
$cart_contents = array();
foreach ( $mai_cat as $cart_key => $product_title ) {
$cart_contents[ $cart_key ] = $woocommerce->cart->cart_contents[ $cart_key ];
}
$woocommerce->cart->cart_contents = $cart_contents;
}, 100 );
Probado y funciona bien
-
hola gracias por esto! Está funcionando para los productos que tienen gato principal y sub, pero también estamos usando productos compuestos y no los muestra debajo de su gato.
– Juan Jones
4 de febrero de 2020 a las 15:15
-
¿Hay alguna forma de excluir el reordenamiento/clasificación de 3 categorías de productos pero aún así agregarlos al carrito de la manera normal? Salud
– Juan Jones
5 de febrero de 2020 a las 10:37
-
¿Qué quieres decir con “producto compuesto”? ¿Está utilizando la extensión “Productos compuestos” de woocommerce?
– Zecka
27 de febrero de 2020 a las 13:17
-
Sí, estamos usando productos compuestos junto con productos normales, está ordenando bien los productos normales, pero desordenando el pedido de productos compuestos
– Juan Jones
1 de marzo de 2020 a las 13:07
-
Existen funciones que debería ser útil para productos compuestos.
– Mates
4 de marzo de 2020 a las 12:05