PluginUs.Net - Business Tools for WooCommerce and WordPress

[realize your idea - make your dreams come true]

Support Forum

You need to log-in to create request (topic) to the support

How disable unused terms in filter?

๐ŸŽ„ Holiday Notice - Support Vacation ๐ŸŽ„

ATTENTION: From December 28, 2025 to January 6, 2026 our support team will be on vacation.

Important information:

  • โŒ No ticket responses from December 28 to January 6
  • โœ… Support will resume on January 7, 2026
  • ๐Ÿ“ You can still submit tickets during vacation - they will be queued and answered starting January 7
  • โš ๏ธ Urgent technical issues: Please check our documentation and codex first

๐ŸŽ… Season's Greetings! ๐ŸŽ…

We want to thank all our amazing customers for your trust and support throughout 2025!
Merry Christmas and Happy New Year to you and your families! ๐ŸŽ‰

We wish you:

  • ๐Ÿš€ Successful online stores
  • ๐Ÿ’ฐ Growing sales
  • ๐Ÿ˜Š Happy customers
  • ๐ŸŽฏ Achieved goals in 2026

Thank you for being with us! We appreciate every one of you and look forward to continuing our work together in the new year.

Rest, recharge, and see you in 2026!

Best regards,
PluginUs.Net Team

The support doesn work on Saturdays and Sundays, so some Friday requests can be answered on Monday. If you have problems with registration ask help on contact us page please
If you not got email within 24~36 business hours, firstly check your spam box, and if no any email from the support there - back to the forum and read answer here. DO NOT ANSWER ON EMAILS [noreply@pluginus.net] FROM THE FORUM!! Emails are just for your info, all answers should be published only here.
The support doesn work on Saturdays and Sundays, so some Friday requests can be answered on Monday.

I need to hide products on my shop which are included in grouped products. I wrote function which does it:

add_filter('woof_products_query', 'woof_hide_grouped_products_from_category', 100);
function woof_hide_grouped_products_from_category($query_vars)
{
    $taxonomy = $query_vars['tax_query'][0]['taxonomy'];
    $term_slug = $query_vars['tax_query'][0]['terms'][0];
    $term = get_term_by('slug', $term_slug, $taxonomy);
    $term_id = $term ? $term->term_id : 0;
    if (isset($taxonomy) && $taxonomy && isset($term_id) && $term_id) {
        $child_product_ids = get_grouped_children_ids($term_id, $taxonomy);
        if (!empty($child_product_ids)) {
            $query_vars['post__not_in'] = $child_product_ids;
        }
    }
    return $query_vars;
}

All is good, products are not visible in products list. But terms of taxonomies which include only those products still are present in filter.

How can I hide from the filter taxonomy terms that only contain hidden products that are part of group products?

Hello

You can edit requests for counting - woof_dynamic_count_attr ( https://share.pluginus.net/image/i20230814141026.png )

Thank you! It works. But the plugin starts to work very slowly, because for each term there is a recalculation with post__not_in. And if I do not change the query, but exclude unnecessary elements already after receiving the result? Is there any hook for this case? And will it make the filter faster?

Hello

Unfortunately not, because in any case, a dynamic recalculation will be needed.

Maybe there are woocommerce hooks, but unfortunately my filter plugin doesn't have such a hook

Understand. Thank you very much for the answers!

Cancel post__not_in โ€“ he thinks for a very long time. I came up with another option, maybe someone will find it useful.

So, instead of searching for products that are part of a group product for each term separately, we store a special post_meta field for those products. We write the following synchronization when saving any product:

// Synchronize 'grouped_child' post_metas in products on product save
add_action('save_post', 'synchronize_grouped_child_post_meta', 10, 3);
function synchronize_grouped_child_post_meta($post_id, $post, $update)
{
    $args = array(
        'post_type' => 'product',
        'posts_per_page' => -1,
    );
    $products = get_posts($args);
    $grouped_products_ids = [];
    $simple_products_ids = [];
    foreach ($products as $product) {
        $parent_grouped_id = get_parent_grouped_id($product->ID);
        if ($parent_grouped_id) {
            $grouped_products_ids[] = $product->ID;
        } else {
            $simple_products_ids[] = $product->ID;
        }
    }
    foreach ($grouped_products_ids as $product_id) {
        if (!get_post_meta($product_id, 'grouped_child', true)) {
            update_post_meta($product_id, 'grouped_child', 'yes');
        }
    }
    foreach ($simple_products_ids as $product_id) {
        if (get_post_meta($product_id, 'grouped_child', true)) {
            delete_post_meta($product_id, 'grouped_child');
        }
    }
}

The get_parent_grouped_id function looks like this:

function get_parent_grouped_id($children_id)
{
    global $wpdb;
    $results = $wpdb->get_col("SELECT post_id FROM {$wpdb->prefix}postmeta
        WHERE meta_key = '_children' AND meta_value LIKE '%$children_id%'");
    // Will only return one product Id or false if there is zero or many
    return sizeof($results) == 1 ? reset($results) : false;
}

Now, instead of a complex condition to search for post__not_in, we add a simple meta-query to all three required hooks:

// Hide simple products from category page if they are in grouped product
add_filter('woocommerce_product_query', 'hide_grouped_products_from_category', 99999);
function hide_grouped_products_from_category($query)
{
    if (
        !is_admin() && $query->is_main_query() && $query->is_archive()
    ) {
        $meta_query = [
            [
                'key' => 'grouped_child',
                'compare' => 'not exists',
            ],
        ];
        $query->set('meta_query', $meta_query);
    }
}

add_filter('woof_products_query', 'woof_hide_grouped_products_from_category', 100);
add_filter('woof_dynamic_count_attr', 'woof_hide_grouped_products_from_category', 10);
function woof_hide_grouped_products_from_category($query_vars)
{
    $query_vars['meta_query'] = [
        [
            'key' => 'grouped_child',
            'compare' => 'not exists',
        ],
    ];
    return $query_vars;
}

It works! Thanks for the tips that led to the correct decision!

Hello

Great! Thank youย  forย  yourย  cooperation