Показать все товары по категориям с 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>';
    }
}
?> 
JacobTheDev
источник
Вам просто нужна петля петель. Внутри вашего foreach(), запустите новый, WP_Query()чтобы получить все продукты в этом сроке ... и затем просмотреть их.
helgatheviking
Я думаю, что понимаю, как это сделать, но я ничего не могу найти в списке продуктов по категориям с помощью PHP (все, что я могу найти, это бессмысленный шорткод). Если вы можете показать мне, как выглядит этот код, я смогу выяснить все остальное.
JacobTheDev
2
Вам не нужен шорткод, список продуктов по категориям - это просто налоговый запрос .
helgatheviking
Я знал, что мне не нужен шорткод, я говорил, что это все, что я мог найти, что было бесполезно. Ссылка, которую вы предоставили, выглядит многообещающей, завтра я сделаю попытку и сообщу, спасибо.
JacobTheDev
1
Ok. Если вы все еще застряли, отредактируйте ваш вопрос с новой попыткой кодирования, и я посмотрю.
helgatheviking

Ответы:

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>";
    }
}
JacobTheDev
источник
Ницца. Если вы хотите по-настоящему сойти с ума, вы, возможно, захотите заглянуть в Transient API ... это поможет вам не запускать так много запросов при каждой загрузке страницы.
helgatheviking
Как я могу получить эскизы изображений для каждой категории?
Алисса Рейес
Категории @AlyssaReyes по сути не имеют миниатюр; Вы настроили для этого свои поля для своих категорий? Не могли бы вы опубликовать это в новом вопросе с более подробной информацией и прислать мне ссылку, чтобы я мог лучше понять?
JacobTheDev
1
Спасибо, парень, ты сэкономил мне время и направил меня в правильном направлении. Единственный способ улучшить этот ответ - использовать встроенный класс запросов WooCommerce: WC_Product_Queryвместо него WP_Queryиспользовать foreachцикл вместо whileцикла. По причинам, почему, взгляните на документацию Github для запроса: github.com/woocommerce/woocommerce/wiki/… , но суть такова:> "пользовательские запросы WP_Queries могут привести к поломке вашего кода в будущих версиях WooCommerce как данных переход к пользовательским таблицам для лучшей производительности. "
UncaughtTypeError