Woocommerce exclude specific category products from related products [closed]
IT Nursery
June 3, 2022
0
I’m trying to exclude products from two specific categories from showing up in the related products on the content single products page. The closest idea I have stumbled upon is this code from http://docs.woothemes.com/document/exclude-a-category-from-the-shop-page/. Any idea how to modify it for related products and NOT for the shop page?
add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
function custom_pre_get_posts_query( $q ) {
if ( ! $q->is_main_query() ) return;
if ( ! $q->is_post_type_archive() ) return;
if ( ! is_admin() && is_shop() ) {
$q->set( 'tax_query', array(array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( 'knives' ), // Don't display products in the knives category on the shop page
'operator' => 'NOT IN'
)));
}
remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
}
2 Answers 2
Old question, but ranks high in Google. Here’s a solution that works with today’s Woocommerce.
Add this to your functions.php or custom plugin.
function exclude_brands_from_related( $categories ){
// array of category id's that should be excluded
$exclude_cats = array( '100', '101', '102');
foreach( $categories as $index => $cat ){
if( in_array( $cat->term_id, $exclude_cats ) ){
unset($categories[$index]);
}
}
return $categories;
}
add_filter( 'woocommerce_get_related_product_cat_terms', 'exclude_brands_from_related' );
And to do the same with tags:
function exclude_tags_from_related( $tags ){
// array of tags that should be excluded
$exclude_tags = array( 'discontinued', 'whatever', 'even-more');
foreach( $tags as $index => $tag ){
if( in_array( $tag->slug, $exclude_tags ) ){
unset($tags[$index]);
}
}
return $tags;
}
add_filter( 'woocommerce_get_related_product_tag_terms', 'exclude_tags_from_related' );