Показуйте всі товари за категоріями за допомогою 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()запустіть нову, WP_Query()щоб захопити всі продукти в цьому терміні .., а потім переведіть їх.
helgatheviking

Я думаю, я розумію, як це зробити, але я не можу знайти нічого про перерахування продуктів за категоріями з PHP (все, що я можу знайти, - це дурниця з коротким кодом). Якщо ви можете показати мені, як виглядає цей код, я маю змогу розібратися з рештою.
JacobTheDev

2
Вам не потрібен короткий код, перелік продуктів за категоріями - це лише податковий запит .
helgatheviking

Я знав, що мені не потрібен короткий код, я говорив, що це все, що я міг знайти, що було не доцільно. Це надане вами посилання виглядає багатообіцяючим, я завтра сфотографую його та звіт, дякую.
JacobTheDev

1
Гаразд. Якщо ви все ще застрягли, відредагуйте своє запитання новою спробою кодування, і я погляну.
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>";
    }
}

Приємно. Якщо ви хочете зійти з розуму, ви можете заглянути API Transients ..., що допоможе вам не запускати так багато запитів на кожному завантаженні сторінки.
helgatheviking

Як я можу отримати ескізи зображень для кожної категорії?
Alyssa Reyes

@AlyssaReyes категоріям не мають власне ескізів; ви встановили для цього спеціальне поле для своїх категорій? Чи можете ви опублікувати це питання в новому запитанні з більш детальною інформацією та надіслати мені посилання, щоб я міг краще зрозуміти?
JacobTheDev

1
Спасибі людино, ти врятував мене деякий час і направив мене в правильному напрямку. Єдиний спосіб, коли я міг би покращити цю відповідь, - це використовувати вбудований клас запитів WooCommerce: WC_Product_Queryзамість WP_Query, а потім використовувати foreachцикл замість whileциклу. З причин, чому дивіться документацію Github для запиту: github.com/woocommerce/woocommerce/wiki/… , але суть:> "користувацькі WP_Queries запити, ймовірно, зламають ваш код у майбутніх версіях WooCommerce як дані рухається до спеціальних таблиць для кращої продуктивності. "
UncaughtTypeError
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.