Matriz de carrinho de pedidos Woocommerce por cat e sub cat

8

Olá, estamos tentando classificar a categoria de produto Woo Cart por principal e a lista nos produtos dessa categoria. Como abaixo:

Peças de roda

  • raios 12
  • Tyre's

Quadro, Armação

  • Quadro Y
  • Quadro X
  • Quadro Z

Assento

  • Assento 1
  • Assento 2

Conseguimos exibir por ordem de gato, mas não os está ordenando em Main Cat -> Sub Cat

Temos o código abaixo e tentando ordenar o carrinho de compras por cat e sub cat

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

Alguém tem alguma idéia, por favor?

John Jones
fonte

Respostas:

1

Seu código estava correto, mas você tinha exatamente o natsortque retornar 1 está causando o problema. Você também precisa classificar as categorias por ordem do menu. Por favor, verifique o código abaixo funcionando perfeitamente.

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

Testado e funciona bem

raju_eww
fonte
Oi obrigado por isso! Está trabalhando para os produtos que possuem gato pai e submarino, mas também estamos usando produtos compostos e não os exibimos sob o gato ..
John Jones
Se existe alguma maneira de excluir a reordenação / classificação de 3 categorias de produtos, mas ainda adicioná-las ao carrinho da maneira normal de cortejar? Cheers
John Jones
você resolveu o problema?
raju_eww
O que você quer dizer com "produto composto"? Você está usando a extensão "Produtos compostos" do woocommerce?
ZecKa 27/02
Sim, estamos usando produtos compostos ao lado de produtos normais, ordenando os produtos normais, mas alterando a ordem dos produtos compostos
John Jones