• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Как вывести в категории ее дочерние подкатегории, но без товаров

buldog52

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

kovka.png

Что сделано:
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 );
}
}
тоже не дала результатов.

Собственно, вопрос: Как вывести в категории дочерние подкатегории, но без товаров?
 

buldog52

Новичок
Нашел (надеюсь) вариант решения проблемы.
Создал страницу в которую вписал шорткод [product_categories parent="81" hide_empty=0]
Вывелись продуктовые категории-дочки категории номер 81 (Готовые изделия) http://kovka071.domsaitovtest.ru/gotovye-izdeliya/
Товары не выводились (ибо в шорткоде их нету)

Но, появилась новая проблема - скрин

kovka2.png

Шорткодная версия вывела категорию Кованая мебель.
Так называлась до переименования категория Кованые дымники.
Кто знает как это исправить?
 

buldog52

Новичок
Решил проблему.
Написал шаблон с циклом, в котором вывел дочерние категории, указанной категории.
Может кому будет интересно.

<?php
while ( have_posts() ) :
the_post();
?>
<div class="product-wrap forging-elements">
<span class="title-section">
<span class="h2"><? echo the_title(); ?></span>
</span>
<?
$parentid = CFS()->get( 'cat_id' );
/* На сайте стоит плагин Custom Fields Suite. Здесь, на конкретной странице получаем номер категории, чьих дочерей будем выводить. Плагин настроен так, что даже если номер категории не ввели или забыли, он по умолчанию равен 0. */

$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>';
}
?>
</div>
<?
endwhile; // End of the loop.
?>

Ссылка на проблемуhttp://kovka071.domsaitovtest.ru/product-category/gotovye-izdeliya/
 
Сверху Снизу