-
-
Save simonlk/3926139 to your computer and use it in GitHub Desktop.
| // 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; | |
| } | |
| } |
Wow, thank you so much! I notice that this addition makes products show up on the shop page, even though my settings are correct to make them not show up. I have tried editing this addition, but I can't get the products to go away. Would it be possible for you to help me edit this to prevent products from appearing on the shop page? I would really appreciate it! The shop is http://www.pacsglobal.com/shop which only has 2 categories and 1 item until I can get this issue handled.
// WooCommerce Code
add_filter('woocommerce_product_subcategories_args', 'woocommerce_show_empty_categories');
function woocommerce_show_empty_categories($cat_args){
$cat_args['hide_empty']=0;
return $cat_args;
}
In your functions.php is all you need... not all of this.
All of that big chunk of function works for me, and filter doesn't... :-( Guess I'll stay with large chunk.
Better yet, since version 2.2.6 released on 08/10/2014:
add_filter('woocommerce_product_subcategories_hide_empty', 'woocommerce_show_empty_categories', 10, 1);
function woocommerce_show_empty_categories($show_empty){
return true;
}@dalemoore's solution would have worked on old versions of WooCommerce, but at some point they switched over to this new woocommerce_product_subcategories_hide_empty filter, which occurs after the categories are retrieved with the arguments provided by the woocommerce_product_subcategories_args filter.
You can actually use predefined core function __return_true(), so the whole thing transforms into one line of code in your functions.php:
add_filter( 'woocommerce_product_subcategories_hide_empty', '__return_true');StingerDevlab.
Yup that's the fix, nice & simple
Still works as of this post with WP 4.6 & WooCommerce 2.6.4
I just wish they would put a 'show empty categories' button, enough people are calling for it to warrant it's inclusion
Works for me better and more simple:
Code for WooCommerce 3.x+
function hide_empty_categories ( $hide_empty ) {
$hide_empty = FALSE;
// You can add other logic here too
return $hide_empty;
}
add_filter( 'woocommerce_product_subcategories_hide_empty', 'hide_empty_categories', 10, 1 );
Pre 3.x Code
function show_empty_categories ( $show_empty ) {
$show_empty = TRUE;
// You can add other logic here too
return $show_empty;
}
add_filter( 'woocommerce_product_subcategories_hide_empty', 'show_empty_categories', 10, 1 );
aliomaster, thanks a lot!
almazka987 Thanks. That worked like a charm
Great, just what I needed! Do you also have a solution for the product categories widget to show empty categories? Cheers!