Afficher tous les produits par catégorie avec WooCommerce

13

Avec WooCommerce, je veux afficher toutes les catégories dans un magasin en tant qu'en-têtes, avec tous leurs produits répertoriés ci-dessous dans une liste non ordonnée. Est-ce possible? J'ai vu quelques choses qui me permettront d'afficher une liste de catégories ou une liste de produits pour une catégorie spécifique, mais rien qui passera par tout comme je l'ai décrit.

Voici ce que j'utilise actuellement pour répertorier toutes les catégories:

<?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
la source
Vous avez simplement besoin d'une boucle de boucles. À l'intérieur de votre foreach(), lancez un nouveau WP_Query()pour saisir tous les produits dans ce terme .. puis parcourez-les.
helgatheviking
Je pense que je comprends comment faire cela, mais je ne trouve rien sur la liste des produits par catégorie avec PHP (tout ce que je peux trouver est un non-sens de shortcode). Si vous pouvez me montrer à quoi ressemble ce code, je devrais être capable de comprendre le reste.
JacobTheDev
2
Vous n'avez pas besoin d'un shortcode, la liste des produits par catégorie n'est qu'une requête fiscale .
helgatheviking
Je savais que je n'avais pas besoin d'un shortcode, je disais que c'était tout ce que je pouvais trouver, ce qui n'était pas utile. Ce lien que vous avez fourni semble prometteur, je vais essayer demain et faire un rapport, merci.
JacobTheDev
1
D'accord. Si vous êtes toujours bloqué, modifiez votre question avec votre nouvelle tentative de codage et je vais y jeter un œil.
helgatheviking

Réponses:

25

Deviner! Le code ci-dessous répertorie automatiquement toutes les catégories et les publications de chaque catégorie!

$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
la source
Agréable. Si vous voulez devenir vraiment fou, vous voudrez peut-être regarder l' API Transients ... qui vous empêcherait d'exécuter autant de requêtes à chaque chargement de page.
helgatheviking
Comment puis-je obtenir les vignettes d'images pour chaque catégorie?
Alyssa Reyes
Les catégories @AlyssaReyes n'ont pas intrinsèquement de vignettes; avez-vous créé un champ personnalisé pour vos catégories pour cela? Pourriez-vous poster ceci dans une nouvelle question avec plus de détails et m'envoyer le lien pour que je puisse mieux comprendre?
JacobTheDev
1
Merci mec, tu m'as fait gagner du temps et m'a mis dans la bonne direction. La seule façon d'améliorer cette réponse est d'utiliser la classe de requête intégrée de WooCommerce: WC_Product_Queryau lieu de WP_Query, utilisez une foreachboucle au lieu d'une whileboucle. Pour des raisons, consultez la documentation Github de la requête: github.com/woocommerce/woocommerce/wiki/… , mais l'essentiel est:> "les requêtes WP_Queries personnalisées sont susceptibles de casser votre code dans les futures versions de WooCommerce en tant que données évolue vers des tableaux personnalisés pour de meilleures performances. "
UncaughtTypeError