Home » WooCommerce: Detect if Current Category is a Subcategory

WooCommerce: Detect if Current Category is a Subcategory

by Tutor Aspire

A client of mine had to style a WooCommerce product category page but ONLY if it was a subcategory. So I decided to add a “subcategory” class to the HTML body, so that they could target this in their custom CSS.

As usual, the PHP is quite easy: I check if the current page is a product category, then if the category has “parents” – and only in this case – add a body class. Pretty easy!

WooCommerce: detect if current page is a subcategory

PHP Snippet 1: Add Body Class if Current Page is a Subcategory – WooCommerce

/**
 * @snippet    Add "Subcategory" Class to HTML Body
 * @how-to       Get tutoraspire.com FREE
 * @author       Tutor Aspire
 * @compatible    WooCommerce 5
 * @donate $9     https://www.tutoraspire.com
 */
 
add_filter( 'body_class', 'tutoraspire_wc_product_cats_css_body_class' );

function tutoraspire_wc_product_cats_css_body_class( $classes ){
   if ( is_tax( 'product_cat' ) ) {
      $cat = get_queried_object();
      if ( $cat->parent > 0  ) $classes[] = 'subcategory';
   }
   return $classes;
}

PHP Snippet 2: Detect if Current Subcategory Page Belongs To a Specific Parent Category – WooCommerce

As you can see inside the first snippet, there is a way to find out if the current object (a product category in this case) has a parent. You can apply the same method for other conditional work.

In this case study, however, I want to check if the subcategory ID is a child of a specific product category ID, so that I can run PHP only if this condition is met.

/**
 * @snippet    Check If Subcategory is Child Of Category ID
 * @how-to       Get tutoraspire.com FREE
 * @author       Tutor Aspire
 * @compatible    WooCommerce 5
 * @donate $9     https://www.tutoraspire.com
 */
 
$cat = get_queried_object();
if ( $cat->parent === 456  ) {
   // do something if parent term id is 456
}

PHP Snippet 3: Detect if Current Subcategory Page Belongs To a Specific Ancestor Category – WooCommerce

Not only you can detect if a subcategory belongs to a parent category, but also grandparent, great grandparents and so on…

/**
 * @snippet    Check If Subcategory Has Category ID Ancestor
 * @how-to       Get tutoraspire.com FREE
 * @author       Tutor Aspire
 * @compatible    WooCommerce 5
 * @donate $9     https://www.tutoraspire.com
 */
 
$cat_id = get_queried_object_id();
$ancestors = get_ancestors( $cat_id, 'product_cat' );
if ( in_array( 456, $ancestors ) ) {
   // do something if term id 456 is an ancestor
}

You may also like