Exibir todos os produtos por categoria com WooCommerce

13

Com o WooCommerce, desejo exibir todas as categorias em uma loja como títulos, com todos os produtos listados abaixo em uma lista não ordenada. Isso é possível? Eu já vi algumas coisas que me permitem exibir uma lista de categorias ou uma lista de produtos para uma categoria específica, mas nada que percorra tudo da maneira que descrevi.

Aqui está o que estou usando no momento para listar todas as categorias:

<?php
$args = array(
    'number'     => $number,
    'orderby'    => $orderby,
    'order'      => $order,
    'hide_empty' => $hide_empty,
    'include'    => $ids
);
$product_categories = get_terms( 'product_cat', $args );
$count = count($product_categories);
if ( $count > 0 ){
    foreach ( $product_categories as $product_category ) {
        echo '<h4><a href="' . get_term_link( $product_category ) . '">' . $product_category->name . '</h4>';
    }
}
?> 
JacobTheDev
fonte
Você simplesmente precisa de um loop de loops. Dentro do seu foreach(), execute um novo WP_Query()para pegar todos os produtos nesse termo ... e depois passe por eles.
helgatheviking
Acho que entendo como fazer isso, mas não consigo encontrar nada sobre a lista de produtos por categoria com PHP (tudo o que consigo encontrar é um absurdo de código curto). Se você puder me mostrar como é esse código, eu posso descobrir o resto.
JacobTheDev
2
Você não precisa de um código de acesso, a listagem de produtos por categoria é apenas uma Consulta de impostos .
precisa saber é o seguinte
Eu sabia que não precisava de um código de acesso, estava dizendo que era tudo o que conseguia encontrar, o que foi inútil. Esse link que você forneceu parece promissor, vou tentar amanhã e relatar, obrigado.
JacobTheDev
1
Está bem. Se você ainda estiver travado, edite sua pergunta com sua nova tentativa de codificação e eu darei uma olhada.
helgatheviking

Respostas:

25

Descobri isso! O código abaixo lista automaticamente todas as categorias e as postagens de cada categoria!

$args = array(
    'number'     => $number,
    'orderby'    => 'title',
    'order'      => 'ASC',
    'hide_empty' => $hide_empty,
    'include'    => $ids
);
$product_categories = get_terms( 'product_cat', $args );
$count = count($product_categories);
if ( $count > 0 ){
    foreach ( $product_categories as $product_category ) {
        echo '<h4><a href="' . get_term_link( $product_category ) . '">' . $product_category->name . '</a></h4>';
        $args = array(
            'posts_per_page' => -1,
            'tax_query' => array(
                'relation' => 'AND',
                array(
                    'taxonomy' => 'product_cat',
                    'field' => 'slug',
                    // 'terms' => 'white-wines'
                    'terms' => $product_category->slug
                )
            ),
            'post_type' => 'product',
            'orderby' => 'title,'
        );
        $products = new WP_Query( $args );
        echo "<ul>";
        while ( $products->have_posts() ) {
            $products->the_post();
            ?>
                <li>
                    <a href="<?php the_permalink(); ?>">
                        <?php the_title(); ?>
                    </a>
                </li>
            <?php
        }
        echo "</ul>";
    }
}
JacobTheDev
fonte
Agradável. Se você quiser ficar louco, pode procurar na API do Transients ... que ajudaria a impedir que você execute tantas consultas a cada carregamento da página.
helgatheviking
Como posso obter as miniaturas de imagens para cada categoria?
Alyssa Reyes
As categorias @AlyssaReyes não possuem inerentemente miniaturas; você configurou um campo personalizado para suas categorias para isso? Você poderia postar isso em uma nova pergunta com mais detalhes e me enviar o link para que eu possa entender melhor?
21816 JacobTheDev # 03
1
Obrigado, cara, você me salvou um pouco e me colocou na direção certa. A única maneira de melhorar essa resposta é usar a classe de consulta interna do WooCommerce: em WC_Product_Queryvez de WP_Query, em seguida, use um foreachloop em vez de um whileloop. Por motivos, dê uma olhada na documentação do Github para a consulta: github.com/woocommerce/woocommerce/wiki/… , mas o essencial é:> "as consultas personalizadas do WP_Queries provavelmente quebrarão seu código nas versões futuras do WooCommerce como dados se move em direção a tabelas personalizadas para obter melhor desempenho ".
UncaughtTypeError