WooCommerceでカテゴリ別にすべての製品を表示する


13

WooCommerceを使用すると、ストア内のすべてのカテゴリを見出しとして表示し、すべての製品を以下の順序なしリストに表示します。これは可能ですか?カテゴリのリストまたは特定のカテゴリの製品のリストを表示できるものをいくつか見てきましたが、説明したとおりにすべてをループするものはありません。

すべてのカテゴリを一覧表示するために現在使用しているものは次のとおりです。

<?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>';
    }
}
?> 

ループのループが必要です。内で、その期間のすべての製品を取得foreach()するためにnew WP_Query()を実行し、それらをループします。
2014年

私はこれを行う方法を理解していると思いますが、PHPでカテゴリ別に製品をリストすることについて何も見つけることができません(見つけることができるのはショートコードナンセンスです)。そのコードがどのように見えるかを見せていただければ、残りを理解できるはずです。
JacobTheDev

2
ショートコードは必要ありません。カテゴリごとに商品をリストするのは単なるTax Queryです。
14年

私はショートコードが必要ないことを知っていました、私はそれが私が見つけることができるすべてであると言っていました、それは役に立たなかった。ご提供いただいたリンクは有望に見えますが、明日お届けします。ありがとうございます。
JacobTheDev

1
OK。それでも動かない場合は、新しいコーディングの試みで質問を編集してみてください。
14年

回答:


25

理解した!以下のコードは、すべてのカテゴリと各カテゴリの投稿を自動的にリストします!

$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>";
    }
}

いいね 本当に夢中になりたい場合は、Transients APIを調べてください。これは、ページの読み込みごとに非常に多くのクエリを実行しないようにするのに役立ちます。
14年

各カテゴリの画像サムネイルを取得するにはどうすればよいですか?
アリッサレイエス

@AlyssaReyesカテゴリーには本質的にサムネイルがありません。このためにカテゴリのカスタムフィールドを設定しましたか?これをより詳細に新しい質問に投稿し、リンクを送って私がよりよく理解できるようにできますか?
JacobTheDev

1
おかげで、時間を節約して正しい方向に導いてくれました。この答えを改善できる唯一の方法は、WooCommerceの組み込みクエリクラスを使用することです:WC_Product_Queryではなく、、WP_Query次にforeachループではなくループを使用しwhileます。理由については、クエリのGithubドキュメントを参照してください:github.com/woocommerce/woocommerce/wiki/…が、要点は次のとおりです。パフォーマンスを向上させるためにカスタムテーブルに移行します。」
UncaughtTypeError
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.