Отображение всех товаров по категориям в WooCommerce

25 мар. 2014 г., 22:40:32
Просмотры: 96.4K
Голосов: 14

В WooCommerce я хочу отобразить все категории магазина в качестве заголовков, со всеми товарами каждой категории, перечисленными ниже в виде маркированного списка. Возможно ли это сделать? Я видел несколько решений, которые позволяют отображать список категорий или список товаров для конкретной категории, но ничего такого, что бы проходило в цикле по всем данным, как я описал.

Вот код, который я сейчас использую для вывода всех категорий:

<?php
$args = array(
    'number'     => $number,         // Количество категорий
    'orderby'    => $orderby,        // Параметр сортировки
    'order'      => $order,          // Направление сортировки
    'hide_empty' => $hide_empty,     // Скрывать пустые категории
    'include'    => $ids             // ID включаемых категорий
);
$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>';
    }
}
?>
5
Комментарии

Вам просто нужен цикл внутри цикла. Внутри вашего foreach() запустите новый WP_Query(), чтобы получить все товары в этом термине... а затем пройдитесь по ним в цикле.

helgatheviking helgatheviking
25 мар. 2014 г. 23:09:44

Кажется, я понимаю, как это сделать, но не могу найти информацию о выводе товаров по категориям с помощью PHP (всё, что нахожу — это какие-то шорткоды). Если вы покажете, как выглядит этот код, я смогу разобраться с остальным.

JacobTheDev JacobTheDev
25 мар. 2014 г. 23:23:11

Вам не нужен шорткод, вывод товаров по категории — это просто Tax Query.

helgatheviking helgatheviking
25 мар. 2014 г. 23:29:26

Я знал, что мне не нужен шорткод, я просто говорил, что это все, что я смог найти, и это было бесполезно. Ссылка, которую вы предоставили, выглядит многообещающе, попробую завтра и отпишусь о результате, спасибо.

JacobTheDev JacobTheDev
26 мар. 2014 г. 00:04:23

Хорошо. Если у вас все еще остались трудности, отредактируйте свой вопрос с новой попыткой кода, и я взгляну на него.

helgatheviking helgatheviking
26 мар. 2014 г. 01:02:39
Все ответы на вопрос 1
4
26

Разобрался! Приведенный ниже код автоматически выводит список всех категорий и постов в каждой категории!

$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>";
    }
}
26 мар. 2014 г. 18:28:48
Комментарии

Отлично. Если хотите по-настоящему разогнаться, взгляните на Transients API... это поможет избежать выполнения такого количества запросов при каждой загрузке страницы.

helgatheviking helgatheviking
26 мар. 2014 г. 19:16:36

Как я могу получить миниатюры изображений для каждой категории?

Alyssa Reyes Alyssa Reyes
6 мар. 2016 г. 07:57:48

@AlyssaReyes у категорий по умолчанию нет миниатюр; вы настроили для своих категорий произвольные поля для этого? Не могли бы вы создать новый вопрос с более подробным описанием и отправить мне ссылку, чтобы я мог лучше разобраться?

JacobTheDev JacobTheDev
7 мар. 2016 г. 16:28:47

Спасибо, чувак, ты сэкономил мне время и направил в нужное русло. Единственное, чем можно улучшить этот ответ — использовать встроенный класс запросов WooCommerce: WC_Product_Query вместо WP_Query, а затем цикл foreach вместо цикла while. Чтобы понять почему, взгляни на документацию на Github по этому запросу: https://github.com/woocommerce/woocommerce/wiki/wc_get_products-and-WC_Product_Query#description, но суть в следующем: > "использование кастомных WP_Queries скорее всего сломает ваш код в будущих версиях WooCommerce, так как данные постепенно переходят в кастомные таблицы для лучшей производительности."

UncaughtTypeError UncaughtTypeError
5 июл. 2019 г. 16:07:39