Отображение всех товаров по категориям в WooCommerce
В 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>';
}
}
?>

Разобрался! Приведенный ниже код автоматически выводит список всех категорий и постов в каждой категории!
$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... это поможет избежать выполнения такого количества запросов при каждой загрузке страницы.

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

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

Спасибо, чувак, ты сэкономил мне время и направил в нужное русло. Единственное, чем можно улучшить этот ответ — использовать встроенный класс запросов 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, так как данные постепенно переходят в кастомные таблицы для лучшей производительности."
