
На странице категории (которая имеет дочерние подкатегории) надо вывести эти самые подкатегории, и не выводить товары.
Сейчас на странице категории выводятся и ее дочерние подкатегории, и товары дочерних подкатегорий.
Как отключить вывод товаров (выделено красным на скрине)?

Что сделано:
1) Вывод дочерних категорий в категории осуществляется функцией
/*--- Выводим подкатегории в категориях ---*/
add_action( 'woocommerce_before_shop_loop', 'display_subcategories_in_categories', 50 );
function display_subcategories_in_categories( $show_products, $args = array() ) {
$parentid = get_queried_object_id();
$args = array(
'parent' => $parentid,
'hide_empty' => false,
'hierarchical' => 1,
'show_option_none' => '',
'taxonomy' => 'product_cat'
);
$terms = get_terms( $args );
if ( $terms ) {
echo '<ul class="product-list">';
foreach ( $terms as $term ) {
echo '<li>';
// Get the thumbnail Id
$thumbnail_id = (int) get_woocommerce_term_meta( $term->term_id, 'thumbnail_id', true );
if( $thumbnail_id > 0 ) {
// Get the attchement image Url
$term_img = wp_get_attachment_url( $thumbnail_id );
} else {
$term_img = '';
}
echo '<a href="' . esc_url( get_term_link( $term ) ) . '" class="link-wrap">';
echo'<span class="img"><img src="' . $term_img . '" ></span>';
echo '<span class="h3">' . $term->name . '</span>';
echo '</a>';
echo '</li>';
}
echo '</ul>';
}
$show_products = 0;
// echo"<div class='func show_products'>" . $show_products . "</div>";
return $show_products;
}
2) Поскольку эта функция навешена на хук woocommerce_before_shop_loop, за которым идет цикл вывода товаров, была предпринята попытка вставить в функцию display_subcategories_in_categories некий флаг $show_products, который будет возвращать из функции некий флаг, для того чтобы отключить цикл вывода продуктов в шаблоне archive-product.php Но она пока не увенчалась успехом. Хотелось бы понять как правильно выдать флаг $show_products перед циклом вывода товаров.
/**
* Hook: woocommerce_before_shop_loop.
* @hooked woocommerce_output_all_notices - 10
* @hooked woocommerce_result_count - 20
* @hooked woocommerce_catalog_ordering - 30
*/
do_action( 'woocommerce_before_shop_loop' );
if ( $show_products != 0 ) {
woocommerce_product_loop_start();
if ( wc_get_loop_prop( 'total' ) ) {
while ( have_posts() ) {
the_post();
/**
* Hook: woocommerce_shop_loop.
*/
do_action( 'woocommerce_shop_loop' );
wc_get_template_part( 'content', 'product' );
}
}
woocommerce_product_loop_end();
}
Мне этот вариант пока кажется самым логичным.
3) Что было сделано, но не дало результатов:
а) В админке в категории Готовые изделия (та что на экране) пытался выставить Тип отображения: Подкатегории. Независимо от того какой тип я выставлвл результат всегда такой как на скрине - выводятся и дочерние подкатегории и товарых этих подкатегорий.
а) функция
add_filter( 'pre_get_posts', 'exclude_products_from_child_cats' );
function exclude_products_from_child_cats( $wp_query ) {
if (isset( $wp_query->query_vars['product_cat'] )) {
$tax_query = array(
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => $wp_query->query_vars['product_cat'],
'include_children' => 0
)
);
$wp_query->set( 'tax_query', $tax_query );
}
}
тоже не дала результатов.
Собственно, вопрос: Как вывести в категории дочерние подкатегории, но без товаров?
Сейчас на странице категории выводятся и ее дочерние подкатегории, и товары дочерних подкатегорий.
Как отключить вывод товаров (выделено красным на скрине)?

Что сделано:
1) Вывод дочерних категорий в категории осуществляется функцией
/*--- Выводим подкатегории в категориях ---*/
add_action( 'woocommerce_before_shop_loop', 'display_subcategories_in_categories', 50 );
function display_subcategories_in_categories( $show_products, $args = array() ) {
$parentid = get_queried_object_id();
$args = array(
'parent' => $parentid,
'hide_empty' => false,
'hierarchical' => 1,
'show_option_none' => '',
'taxonomy' => 'product_cat'
);
$terms = get_terms( $args );
if ( $terms ) {
echo '<ul class="product-list">';
foreach ( $terms as $term ) {
echo '<li>';
// Get the thumbnail Id
$thumbnail_id = (int) get_woocommerce_term_meta( $term->term_id, 'thumbnail_id', true );
if( $thumbnail_id > 0 ) {
// Get the attchement image Url
$term_img = wp_get_attachment_url( $thumbnail_id );
} else {
$term_img = '';
}
echo '<a href="' . esc_url( get_term_link( $term ) ) . '" class="link-wrap">';
echo'<span class="img"><img src="' . $term_img . '" ></span>';
echo '<span class="h3">' . $term->name . '</span>';
echo '</a>';
echo '</li>';
}
echo '</ul>';
}
$show_products = 0;
// echo"<div class='func show_products'>" . $show_products . "</div>";
return $show_products;
}
2) Поскольку эта функция навешена на хук woocommerce_before_shop_loop, за которым идет цикл вывода товаров, была предпринята попытка вставить в функцию display_subcategories_in_categories некий флаг $show_products, который будет возвращать из функции некий флаг, для того чтобы отключить цикл вывода продуктов в шаблоне archive-product.php Но она пока не увенчалась успехом. Хотелось бы понять как правильно выдать флаг $show_products перед циклом вывода товаров.
/**
* Hook: woocommerce_before_shop_loop.
* @hooked woocommerce_output_all_notices - 10
* @hooked woocommerce_result_count - 20
* @hooked woocommerce_catalog_ordering - 30
*/
do_action( 'woocommerce_before_shop_loop' );
if ( $show_products != 0 ) {
woocommerce_product_loop_start();
if ( wc_get_loop_prop( 'total' ) ) {
while ( have_posts() ) {
the_post();
/**
* Hook: woocommerce_shop_loop.
*/
do_action( 'woocommerce_shop_loop' );
wc_get_template_part( 'content', 'product' );
}
}
woocommerce_product_loop_end();
}
Мне этот вариант пока кажется самым логичным.
3) Что было сделано, но не дало результатов:
а) В админке в категории Готовые изделия (та что на экране) пытался выставить Тип отображения: Подкатегории. Независимо от того какой тип я выставлвл результат всегда такой как на скрине - выводятся и дочерние подкатегории и товарых этих подкатегорий.
а) функция
add_filter( 'pre_get_posts', 'exclude_products_from_child_cats' );
function exclude_products_from_child_cats( $wp_query ) {
if (isset( $wp_query->query_vars['product_cat'] )) {
$tax_query = array(
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => $wp_query->query_vars['product_cat'],
'include_children' => 0
)
);
$wp_query->set( 'tax_query', $tax_query );
}
}
тоже не дала результатов.
Собственно, вопрос: Как вывести в категории дочерние подкатегории, но без товаров?
- Ссылка на проблему
- http://kovka071.domsaitovtest.ru/product-category/gotovye-izdeliya/