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?

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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.