PluginUs.Net - Business Tools for WooCommerce and WordPress

[realize your idea - make your dreams come true]
Botoscope is currently in early access

Support Forum

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

Filtered category pages losing category context (Archive Title/Description reset to Shop)

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.
Support notice: Our support team will be on vacation from August 8 to September 3, so response times may be delayed and replies may be irregular.

We're running HUSKY – Products Filter Professional v1.3.8.1 on a WooCommerce site with an Elementor-built archive template (Theme Builder → Product Archive, condition: All Product Archives).

Website: https://evertreeuk.kinsta.cloud/product-category/vaporizers/
Setup:

  • Archive template built with Elementor, containing Archive Title and Archive Description dynamic widgets, plus a Loop Grid with a [woof] filter shortcode inside it
  • "Try to ajaxify the shop" is currently set to No
  • "Set filter automatically" is set to Yes

Issue:
When a user applies a filter on a product category page (e.g. /product-category/vaporizers/?swoof=1&product_brand=davinci&really_curr_tax=286-product_cat):

  • The URL correctly stays on the category page
  • However, the Elementor Archive Title and Archive Description widgets switch to showing"Shop" content instead of the category's own title/description
  • The page's SEO title/meta also output Shop data instead of category data

This suggests that when the filter is applied, WP_Query's queried object (or is_product_category()) is being reset to a generic shop archive context rather than retaining the original category context, even though the URL path itself is unchanged.

Questions:

  1. Is this expected behavior with"Set filter automatically" enabled and AJAX mode off, or is there a setting we're missing to retain the category query context after filtering?
  2. Does enabling"Try to ajaxify the shop" (true AJAX mode) prevent this entirely, since the page wouldn't reload/re-resolve the query? But it's not working when AJAX on.
  3. Is this resolved in the Pro version specifically, or is it the same architecture in both Free and Pro?

We'd like to confirm this before considering an upgrade. Happy to share staging access or further details if useful.

Hi Hardik

Thank you for the detailed report.

This behavior may actually be related to the theme/Elementor setup rather than a HUSKY plugin issue itself, since Elementor's Archive Title and Archive Description widgets pull data from the queried object, and that can be affected by how the archive template handles filtered queries.

I also noticed you already have Pro licenses (v.2.2.1) active on related sites: evertree.eu, evertree.co.uk and evertree.ie, all running the premium version. Since you already have access to the Pro version, could you please download the latest version from CodeCanyon and test it directly on the staging site to confirm whether the issue persists there as well?

To help us investigate further, could you also provide:

  • Three purchase codes for the licenses on evertree.eu, evertree.co.uk and evertree.ie
  •  WP-admin access to the staging site (evertreeuk.kinsta.cloud) so we can check the configuration directly.

Use private area of this ticket please:

https://share.pluginus.net/image/i20230222134241.png
https://share.pluginus.net/image/i20230222134615.png
https://share.pluginus.net/image/i20230222134511.png

This will let us confirm whether this is a plugin-side issue or related to the Elementor theme template, and give you a faster answer.

 

Hi Alex, Thanks for fast replay.

Thanks for the explanation. I've shared the WP-admin access for the staging site in the private area of this ticket as requested.

Could you please check it and let us know your findings — whether this is a plugin-side issue or related to the Elementor theme template?

Hello Hardik

In the plugin options I enabled:

  • Disable swoof influence
  • SEO links enabled

Now both pages view-source:https://evertreeuk.kinsta.cloud/product-category/vaporizers/ and view-source:https://evertreeuk.kinsta.cloud/product-category/vaporizers/swoof/product_brand-davinci/ has the same title and description:

For further support, please provide the purchase codes for the sites mentioned above.

Hi Alex,

Thanks for the fixe the issue. I checked it and it's working.

One more point I want to confirm to you.

Separately, I also need the filters to behave dynamically. For example, if a user selects Brand = PAX, the Model filter should only show PAX models. I can see Dynamic Recount is enabled in HUSKY, but the model list is not updating based on the selected brand.

Could you also confirm whether HUSKY Premium's Hide Empty Terms would solve this, or whether it is a separate issue?

Please see video https://drive.google.com/file/d/1KZgLwd-W5iqnCZN8lOZX0U5Ue5WiO5Y9/view?usp=sharing

Hi Hardik

Good question, and glad the category title/description fix worked out.

For the dependent filters behavior you are describing (Model list narrowing down automatically when Brand = PAX is selected), this is fully doable in HUSKY Pro, here is how it works.

There are two settings involved. Dynamic Recount updates the count next to each term based on the current selection, but on its own it does not remove non matching terms from the list, it just shows them with a count of zero. To actually make the Model terms disappear when they have zero results for the selected Brand, you also need Hide Empty Terms enabled alongside Dynamic Recount. Both settings together give you the behavior you are after.

On top of that, there is a shortcode attribute called ajax_redraw that controls how the filter form itself behaves when a user makes a selection. By default, selecting a filter value submits the whole filter and reloads the product results right away. With ajax_redraw="1" combined with autosubmit="0" on the [woof] shortcode, selecting Brand triggers a lightweight AJAX call that only redraws the filter form itself (updating term counts and hiding empty Model terms), without touching the product grid yet. The user then clicks the Filter button once they are done picking Brand and Model, and only then does the actual product filtering happen. This is exactly the cascading filter experience you are describing, and it works across different taxonomies like Brand and Model, it is not limited to a single taxonomy.

So once you are on Pro, the setup would be:

Dynamic Recount: Yes
Hide Empty Terms: Yes
Shortcode: add ajax_redraw="1" autosubmit="0" to your [woof] shortcode attributes

There are also hierarchical dropdowns. Here is a link, but they work within the same taxonomy https://demo.products-filter.com/working-with-hierarchy-drop-down/ . And you most likely have already created the structure of your data.

Hi Alex,

Thanks for the details. I'll ask the client to buy the Pro version for Dynamic Recount + Hide Empty Terms + an AJAX redraw mode, which together give the exact cascading behavior after (select Brand, Model list narrows automatically).

Follow-up question on our filter setup. Separately from the Brand/Model cascading behavior you outlined (which we understand needs Pro), our client also wants to adjust which filters show per product category:

- Vape Parts: remove"Material", keep only Brand + Model
- Grinders: remove"Material" and"Model", keep only Brand (may add Size/Number of Parts later)
- Accessories: remove"Material" and"Model", keep Brand + Category
- Seeds: remove"Model", keep Category + Brand

Is this something we can configure directly in the current filter setup (e.g. per-category widget assignment), or does it also require Pro? If it's doable in the current version, could you point us to the setting/method so we can decide whether to make the change ourselves or have you confirm the config?

Thanks!

 

Hello Hardik

Choosing which filters appear per category is handled by the [woof] shortcode attributes, and those attributes work in the current free version. To keep the two topics apart: the cascading Brand to Model behavior from my previous reply does need Pro (Dynamic Recount + Hide Empty Terms), but the per-category filter sets below do not.

The attribute that does the work is tax_only. It assembles a filter form from exactly the taxonomies you list, in the order you list them. Adding by_only="none" tells HUSKY not to output any non-taxonomy elements (price, SKU, meta fields, and so on). Full reference: https://products-filter.com/shortcode/woof

So your four sets translate to:

Vape Parts: [woof tax_only="product_brand,product_model" by_only="none"]
Grinders: [woof tax_only="product_brand" by_only="none"]
Accessories: [woof tax_only="product_cat,product_brand" by_only="none"]
Seeds: [woof tax_only="product_cat,product_brand" by_only="none"]

Note on slugs: product_brand is confirmed from your own filter URL. Replace product_model and product_cat with the real taxonomy slugs used on your site if they differ (your Model taxonomy might be pa_model or a custom slug, for example).

One design point to keep in mind: HUSKY is one filter form per page by design, so you cannot place several [woof] on the same template at once. To serve a different set per category you have two clean architectural options.

OPTION 1. One central custom shortcode (recommended if you are comfortable with a small snippet).

You keep a single shortcode widget in your Elementor archive template, but instead of [woof] you place your own wrapper shortcode, and the logic that decides which taxonomies to show lives in functions.php. Everything stays in one place, so to change a category's filter set later you just edit one array: (code example)

// Register a wrapper shortcode that outputs a different HUSKY filter
// form depending on the product category currently being viewed.
add_shortcode( 'category_woof', 'my_category_woof' );

function my_category_woof() {
    // Map of: category slug => taxonomies to show for that category
    $map = array(
        'vape-parts'  => 'product_brand,product_model',
        'grinders'    => 'product_brand',
        'accessories' => 'product_cat,product_brand',
        'seeds'       => 'product_cat,product_brand',
    );

    // Fallback set used on categories that are not listed above
    $tax = 'product_cat,product_brand,product_model';

    if ( is_product_category() ) {
        $term = get_queried_object();
        if ( $term AND isset( $map[ $term->slug ] ) ) {
            $tax = $map[ $term->slug ];
        }
    }

    // by_only="none" hides all non-taxonomy elements (price, sku, meta...)
    return do_shortcode( '[woof tax_only="' . esc_attr( $tax ) . '" by_only="none"]' );
}

Then in your archive template you use [category_woof] instead of [woof]. Adjust the slugs on the left of the array to your real category slugs, and the taxonomy names on the right to your real taxonomy slugs.

OPTION 2. Multiple widgets, shown by condition (no code).

Create one shortcode widget per category, each holding its own [woof tax_only="..."] variant from the list above, then control which one appears on which category with a display condition. There are two ways to set the condition. If your filter lives in a classic widget area, our free helper plugin does exactly this: https://github.com/realmag777/Show-WordPress-Widget-by-Logic — you add a condition per widget by category slug and it shows or hides accordingly. If everything is inside Elementor, as in your archive template, Elementor's own Display Conditions on each shortcode widget achieve the same result per category. This route needs no PHP, but you maintain several widgets instead of one array, so it is a simplicity versus maintenance trade-off.

Which to pick: Option 1 if you want a single source of truth and are fine with a snippet, Option 2 if you prefer to stay fully in the page builder with no code.

For a full picture of what is free versus Pro, the limitations are listed here: https://products-filter.com/downloads

Hi Alex,

Thanks for the details and I'll check it and let you know.

Thanks,

Hello Hardik

Welcome!

Hi Alex,

We've found an issue with the Price filter and wanted to confirm before digging further.

The price range filter still doesn't seem to work. When you put a price range in it just returns all products.

Example URL:
https://evertreeuk.kinsta.cloud/product-category/vaporizers/swoof/price-8-to-109/

We've confirmed this happens with the plain default [woof] shortcode too (not just our customized version with tax_only/by_only), so it doesn't seem related to our shortcode customization — it looks like a core price filter / URL parsing issue.

Could you help us check?

Thanks!

 

Hello Hardik

I tested the native WooCommerce price filter on your site, bypassing HUSKY completely, using WooCommerce's own parameters: https://evertreeuk.kinsta.cloud/product-category/vaporizers/?min_price=8&max_price=109

This native filter returns all products too and ignores the range. Since this is the built-in WooCommerce filter with no involvement from our plugin, the problem is in WooCommerce or your site's setup, not in HUSKY. HUSKY relies on the same price data WooCommerce provides, so once the native filter works again, HUSKY will work as well. For a cleaner experience, simply deactivate HUSKY  and you'll see the same result.

Here is what to check, in order. Please retest the native URL above after each step.

1. Regenerate the product lookup table. Go to WooCommerce > Status > Tools and run"Regenerate the product lookup table", then run"Recount terms". WooCommerce filters by price using the wc_product_meta_lookup table (its min_price and max_price columns). If that table is out of sync, price filtering silently returns everything. This is the most common cause, so please try this first.

2. Check your category / shop template. If your category pages are built with a page builder (Elementor, Bricks) or a custom theme template that uses its own product query, that custom loop can ignore WooCommerce's price filter entirely. Temporarily switch the category to the default WooCommerce layout, or test with a default theme such as Storefront, and retest.

3. Clear all caching. On Kinsta, purge both the full-page cache and the object cache, then test the URL in an incognito window. Full-page caching can serve a cached, unfiltered archive. Also make sure the min_price and max_price query strings are not being stripped or cached.

4. Run a conflict test. If the steps above don't help, deactivate other plugins one by one and switch to Storefront to find any plugin or snippet hooking into the main query (for example via pre_get_posts or posts_clauses) and overriding the filter.

If the native URL starts filtering correctly after any step, HUSKY will filter correctly too. If it still returns all products after all four steps, tell us what you found and we'll dig in further with you.

 

Hi Alex,

Thanks for the detailed steps — here's what we found.

1) Regenerated the product lookup table and ran Recount Terms via WooCommerce > Status > Tools — no change, native price URL still returned all products.

2) Temporarily removed the Elementor archive template from one category (reverting to the default WooCommerce template) and the native price filter (?min_price=8&max_price=109) worked correctly.

This confirms the issue: our category pages use an Elementor Loop Grid widget to display products, and Elementor builds its own internal WP_Query for that widget rather than using WordPress's main query. WooCommerce's price filter only hooks into the main query (is_main_query() check), so it never applies to the Elementor Loop Grid's query, even when"Current Query" is selected as the source.

We attempted to work around this on our end by manually re-adding the price meta_query via pre_get_posts and separately via elementor/query/query_vars, but neither has resolved it so far — we're continuing to debug on our side.

Given this is confirmed to be a WooCommerce + Elementor query conflict rather than a HUSKY issue, we don't expect this needs further input from your side, but wanted to close the loop and let you know the root cause, in case you've seen this pattern with other Elementor + HUSKY users and have a known fix or setting we're missing.

Thanks again for your help narrowing this down.

Hello Hardik

Thank you for cooperation! With HUSKY switched off, the native WooCommerce price URL returned all products too. So this is not about how any filter hooks the query, it is simply that the Elementor Loop Grid runs its own separate WP_Query and the price filter (native or HUSKY, they use the same main-query mechanism) never reaches it. That is also why your brand filter works but price does not: the brand comes from the URL and the Loop Grid inherits it, while price is a meta condition injected only into the main query and it does not survive into the Loop Grid clone.

For exactly this situation, when the products are rendered by a page builder or a custom template instead of the main loop, HUSKY has a supported approach. Instead of trying to inject conditions into Elementor's query one by one, HUSKY predicts the full set of product IDs that match the current filter and then constrains the builder's own query to that set. This covers price and every taxonomy at once, and it reads the filter from HUSKY's own request parser, so it also understands your SEO style URL (/swoof/price-8-to-109/). That last point is likely why your manual pre_get_posts and query_vars attempts did nothing: on that URL there is no min_price or max_price in $_GET, the values live in the path, so anything reading $_GET came back empty.

Add this to your child theme functions.php:https://products-filter.com/make-page-builders-and-custom-template-filterable/

Two things to check on your side after adding it:

1) The Loop Grid must be querying products. With source set to Current Query on the category archive this is already the case. If you used a custom query source that does not set post_type to product, the snippet skips it, so make sure the loop targets products.

2) per_page 99999 plus post__in is fine for a catalog your size, but on a very large catalog it gets heavy. After adding the snippet, please test pagination on the Loop Grid and confirm that the unfiltered category view still shows all products.

This should make the price range filter work in the Loop Grid, and it keeps the brand and model filters correct through the same path. If it does not bite immediately, tell us how the Loop Grid is set up (Current Query vs a custom query) and we will adjust it with you.

Welcome!

 

Hi Alex,

Quick update: we replaced the Elementor Loop Grid with the standard Products/Archive widget on our category pages, and the price filter is now working correctly there. For now, we've decided to remove the price filter on the pages still using Loop Grid, so that's resolved on our end for the moment.

One more thing we wanted to confirm: do we still have an outstanding item regarding the"filter narrowing" behavior? Specifically, when a user selects a Brand from the dropdown, then opens the Model dropdown, it should only show Models related to that selected Brand, rather than the full Model list.

Just want to confirm whether, if we need to revisit the setup (Dynamic Recount, Hide Empty Terms, ajax_redraw) you outlined earlier or need to Pro version.

Hello Hardik

Yes, that item is still open, and it is the one part of your setup that does need the Pro version.

To summarize the logic, because it is the same answer for any"hide what is not relevant for the next choice" scenario:

The narrowing you want (select Brand = PAX, then the Model dropdown shows only PAX models) is produced by two settings working together:

Dynamic Recount recalculates the number of matching products for every term based on what is currently selected. On its own it does not remove anything, it only shows the non matching terms with a count of zero.

Hide Empty Terms is what actually removes those zero count terms from the list. This is the setting that makes the Model dropdown shrink to the relevant models only.

Both of these are premium features. There is no way to reproduce this behavior in the free version, because the free version does not recalculate the term sets against the current selection at all.

There is one more piece that is essential for your case, and it is easy to overlook. Since your Brand, Model and Category are separate taxonomies, the filter form itself has to be redrawn after each selection, otherwise the other dropdowns keep showing their original full lists. That is what the AJAX redraw of the form does. On your [woof] shortcode add:

ajax_redraw="1" autosubmit="0" -> https://products-filter.com/shortcode/woof

With that, selecting a Brand triggers a lightweight AJAX call that redraws only the filter form, so all the other dropdowns (Model, Category and any others) are rebuilt according to the current selection, while the product grid stays untouched. The user then presses the Filter button once when the selection is complete, and only then are the products filtered. Without this redraw, Dynamic Recount and Hide Empty Terms have no moment to apply to the other dropdowns.

So the working recipe is:

Dynamic Recount: Yes
Hide Empty Terms: Yes
Shortcode: [woof ... ajax_redraw="1" autosubmit="0"]

There is also a related premium feature worth knowing about, the hierarchical dropdowns. It gives a chained parent to child dropdown experience, but it works inside one taxonomy, not across separate ones. Description and live demo here:

https://demo.products-filter.com/working-with-hierarchy-drop-down/

Since your Brand and Model are separate taxonomies, the Dynamic Recount plus Hide Empty Terms plus AJAX redraw combination above is the right approach for you, and the hierarchical dropdown is an extra option if you ever restructure your data into a single hierarchical taxonomy.

p.s. we m oved from codecanyon and you can buy license directly on the plugin site https://products-filter.com/downloads

Welcome!