Matriz de carro de pedidos de Woocommerce por cat y sub cat

8

Hola, estamos tratando de ordenar el carrito Woo por categoría de producto principal y enumerarlo en los productos de esa categoría. Como abajo:

Piezas de la rueda

  • radios 12
  • Llantas

Marco

  • Marco Y
  • X Frame
  • Marco Z

Asiento

  • Asiento 1
  • Asiento 2

Hemos logrado mostrarlos por orden de gato pero no los ordena en Gato principal -> Gato secundario

Tenemos el siguiente código e intentamos ordenar la matriz de carro por gato y sub gato

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?

John Jones
fuente

Respuestas:

1

Su código era correcto pero tenía exactamente natsortqué devolución 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

raju_eww
fuente
Hola gracias por esto! Está funcionando para los productos que tienen un gato y un sub padre, pero también estamos usando productos compuestos y no los está mostrando debajo de su gato ..
John Jones
Si hay alguna forma de excluir el reordenamiento / clasificación para 3 categorías de productos, pero aún así agregarlos al carrito de la manera normal. Saludos
John Jones
¿Has resuelto el problema?
raju_eww
¿Qué quieres decir con "producto compuesto"? ¿Está utilizando la extensión "Productos compuestos" de woocommerce?
ZecKa
Sí, estamos usando productos compuestos junto con productos normales, ordenando los productos normales bien, pero desordenando el orden de los productos compuestos
John Jones