В одной из ранних статей мы отдельно от основного вывода WC выводили подкатегории. В этой статье мы усложним код вывода категорий и сделаем у категорий и вывод товаров. Это даст нам решение: подкатегория -> товары, подкатегория -> товары … и т.д.
Данное решение с успехом можно применить, когда мы используем Woocommerce в виде каталога или прайса.
Доработка функции вывода подкатегорий
Жирным выделена новая часть, которую я добавил в предыдущее решение
function tutsplus_product_subcategories( $args = array() ) { if ( !is_search() ) { $parentid = get_queried_object_id(); $args = array( 'parent' => $parentid ); $terms = get_terms( 'product_cat', $args ); if ( $terms ) { echo '<ul class="product-cats">'; foreach ( $terms as $term ) { echo '<li>'; echo '<a href="'.esc_url( get_term_link($term) ).'" class="'.$term->slug.'">'; woocommerce_subcategory_thumbnail($term); echo '<h3>'.$term->name.'</h3>'; echo '</a>'; global $post; // !Обязательно заглобалить echo '<ul class="products">'; $args = array( 'post_type' => 'product', 'posts_per_page' => 20, 'product_cat' => $term->slug ); $myposts = get_posts($args); foreach( $myposts as $post ) { setup_postdata($post); get_template_part('solus-product'); } wp_reset_postdata(); echo '</ul>'; } echo '</ul>'; } } } add_action( 'woocommerce_before_shop_loop', 'tutsplus_product_subcategories', 61 );
Обращаю внимание на строку get_template_part(‘solus-product’); в этом шаблоне содержится стандартный вывод товара WC
<li <?php wc_product_class(); ?>><span> <?php do_action('woocommerce_before_shop_loop_item'); do_action('woocommerce_before_shop_loop_item_title'); do_action('woocommerce_shop_loop_item_title'); do_action('woocommerce_after_shop_loop_item_title'); do_action('woocommerce_after_shop_loop_item'); ?> </span></li>
Плагины
Nested Category Layout стоимость 79$ (19.19.2018)
Вывод миниатюры категории произвольного размера
<?php global $wp_query;
$cat = $wp_query->get_queried_object();
$thumbnail_id = get_term_meta( $term->term_id, 'thumbnail_id', true );
$image = wp_get_attachment_url( $thumbnail_id );
echo "<img src='{$image}' alt='' />"; ?>
Если использовать шаблон product-cat-list.php, то первые две строки необязательны.
[site-socialshare]