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

Как отобразит пустые категории в каталоге

alexvan

Новичок
Добрый день, создал все необходимые категории для каталога. Но зайдя в каталог ничего не увидел. После добавления первого товара - отобразились категории которые есть в цепочке по данному товару, и непосредственно категория в которой находится товар. Остальные категории не отображаються. Как сделать отображение пустых категорий (категорий в которых нет ни единого товара). Спасибо.
 

alexvan

Новичок
Спасибо за совет. Если товара пока нет, а категория должна отображаться? Добавлять "выдуманный" не охота.
 

RuslanTomaev

Форумчанин
Добрый день, создал все необходимые категории для каталога. Но зайдя в каталог ничего не увидел. После добавления первого товара - отобразились категории которые есть в цепочке по данному товару, и непосредственно категория в которой находится товар. Остальные категории не отображаються. Как сделать отображение пустых категорий (категорий в которых нет ни единого товара). Спасибо.
Извините, не внимательно прочитал. Попробуйте это в functions.php:

add_filter('woocommerce_product_categories_widget_args', 'woocommerce_show_empty_categories');
function woocommerce_show_empty_categories($cat_args){
$cat_args['hide_empty']=0;
return $cat_args;
}
 

alexvan

Новичок
В какой директории искать необходимый functions.php ? . Как я заметил их несколько.
 

RuslanTomaev

Форумчанин
В какой директории искать необходимый functions.php . Как я заметил их несколько.
Идеальным вариантом было бы создание дочерней темы и в ней править functions.php
Если как проще, то через админку Внешний вид - Редактор - functions.php
 

RuslanTomaev

Форумчанин
Добавил, все по старому. Отображаются только категории с товарами. Вот тут нашел описание http://uploadwp.com/community/index...-categories-in-product-categories-widget.385/ Вашего метода, успеха тоже не добились.

https://gist.github.com/renegadesk/3926139 - рабочее решение, проверил сейчас на своем сайте.
 

alexvan

Новичок
Заработало. Вставлять всю простыню? Или определенную часть. Буду признателен за перевод камментов в коде.
Код:
// Paste this in to your theme's functions file
// Redefine sub category display to output empty categories
function woocommerce_product_subcategories( $args = array() ) {
    global $woocommerce, $wp_query, $_chosen_attributes;
    $defaults = array(
        'before'  => '',
        'after'  => '',
        'force_display' => false
    );
    $args = wp_parse_args( $args, $defaults );
    extract( $args );
    // Main query only
    if ( ! is_main_query() && ! $force_display ) return;
    // Don't show when filtering
    if ( sizeof( $_chosen_attributes ) > 0 || ( isset( $_GET['max_price'] ) && isset( $_GET['min_price'] ) ) ) return;
    // Don't show when searching or when on page > 1 and ensure we're on a product archive
    if ( is_search() || is_paged() || ( ! is_product_category() && ! is_shop() ) ) return;
    // Check cateogries are enabled
    if ( is_product_category() && get_option( 'woocommerce_show_subcategories' ) == 'no' ) return;
    if ( is_shop() && get_option( 'woocommerce_shop_show_subcategories' ) == 'no' ) return;
    // Find the category + category parent, if applicable
    if ( $product_cat_slug = get_query_var( 'product_cat' ) ) {
        $product_cat = get_term_by( 'slug', $product_cat_slug, 'product_cat' );
        $product_category_parent = $product_cat->term_id;
    } else {
        $product_category_parent = 0;
    }
    // NOTE: using child_of instead of parent - this is not ideal but due to a WP bug ( http://core.trac.wordpress.org/ticket/15626 ) pad_counts won't work
    $args = array(
        'child_of'        => $product_category_parent,
        'menu_order'    => 'ASC',
        'hide_empty'    => 0,
        'hierarchical'    => 1,
        'taxonomy'        => 'product_cat',
        'pad_counts'    => 1
    );
    $product_categories = get_categories( $args  );
    $product_category_found = false;
    if ( $product_categories ) {
        foreach ( $product_categories as $category ) {
            if ( $category->parent != $product_category_parent )
                continue;
            if ( ! $product_category_found ) {
                // We found a category
                $product_category_found = true;
                echo $before;
            }
            woocommerce_get_template( 'content-product_cat.php', array(
                'category' => $category
            ) );
        }
    }
    // If we are hiding products disable the loop and pagination
    if ( $product_category_found == true && get_option( 'woocommerce_hide_products_when_showing_subcategories' ) == 'yes' ) {
        $wp_query->post_count = 0;
        $wp_query->max_num_pages = 0;
    }
    if ( $product_category_found ) {
        echo $after;
        return true;
    }
}
У меня в корне каталога теперь главные категории вместе с товарами отображает.
 

RuslanTomaev

Форумчанин
Есть решение более красивое отображает только родительские категории как пустые, так и заполненные

add_filter( 'woocommerce_product_subcategories_hide_empty', 'show_empty_categories', 10, 1 );
function show_empty_categories ( $show_empty ) {
$show_empty = true;
// You can add other logic here too
return $show_empty;
}

Если необходимо вывести дочерние категории, гуглите
 

Mario

Новичок
Тот же вопрос.
Ищу решение, чтобы через какой-нибудь фильтр включить отображение пустых категорий на странице магазина.
Фильтры 'woocommerce_product_subcategories_hide_empty' и 'widget_categories_args' не помогают. Возможно что-то изменилось в свежих версиях WC? Использую версию 3.1.0.
Могу конечно вмешаться в цикл через pre_get_posts, но должно же быть более изящное решение! Полчаса лазил по буржунету, но советы все одни и теже, что и выше. Как-то странно все это...
 

Mario

Новичок
Залез в код WC и нашел таки решение. Фильтер на 1 пост выше моего используется верный, только он должен возвращать false, а не true. Например, так:
PHP:
add_filter( 'woocommerce_product_subcategories_hide_empty', function() { return false; }, 10, 1 );
 

fratela

Новичок
Залез в код WC и нашел таки решение. Фильтер на 1 пост выше моего используется верный, только он должен возвращать false, а не true. Например, так:
PHP:
add_filter( 'woocommerce_product_subcategories_hide_empty', function() { return false; }, 10, 1 );
Спс до сих пор это работает
 
Сверху Снизу