Filter
v1.0.9Faceted, real-time filtering for posts & WooCommerce — no reload. Build a filter set with checkboxes, sliders, search and sort, pull values from taxonomies, custom fields or WooCommerce, and drop it onto any archive with a shortcode, an Elementor widget, or a native Loop Grid. A built value index keeps results, per-option counts and active-filter chips instant.
Overview
The Filter module adds a live, faceted filter UI — like a shop sidebar — to any archive or listing, with no page reload.
Build a filter set of facets, point them at your content, and place the UI on any archive. Visitors narrow posts and WooCommerce products by ticking values, dragging a price slider or typing a keyword — results, per-option counts and active-filter chips update instantly over AJAX, and the selection is mirrored into the URL so it is shareable and back-button friendly.
What you can do
- Add checkbox, radio, dropdown, slider, search, sort and pager facets
- Pull values from any taxonomy, custom field, post type, author or date
- Filter WooCommerce by price, stock, on-sale and rating
- Show live counts, removable chips and an instant result count
- Mirror the selection into a shareable URL with back-button support
- Place it with a shortcode, an Elementor widget, or a Loop Grid
Requirements & compatibility
Filter runs on any modern WordPress host; WooCommerce and Elementor are optional.
| Requirement | Minimum | Recommended |
|---|---|---|
| WordPress | 6.0 | 6.5 or newer |
| PHP | 7.4 | 8.1 or newer |
| WooCommerce | Optional | For product, price, stock & rating facets |
| Elementor | Optional | For the four widgets & Loop Grid integration |
| Theme | Any | Woo results render through the theme’s product cards |
Installation & activation
Filter ships inside WPStack — switch it on per site from the modules panel.
Open the WPStack modules panel
In your WordPress admin, go to WPStack → Modules and find Filter.
Activate Filter
Flip the Filter toggle to on. A new Filter item appears in the WPStack menu.
Build a filter set
Open WPStack → Filter → Add filter set, name it, and add facets.
Build the index
Run a reindex once so the value index is ready — after that it keeps itself in sync.
Place it on a page
Drop the [wpstack_filter] and [wpstack_listing] shortcodes, add the Elementor widgets, or enable it on a Loop Grid.
The filter builder
A filter set is a drag-and-drop list of facets. Each facet has a type, a data source and its own options.
Per-facet options
- Match mode — AND (all selected values) or OR (any selected value)
- Hierarchical tree — show a category’s parent/child terms as a nested tree
- Ghost options — optionally keep 0-count values visible but disabled
- Show N more — collapse a long option list behind a “show more” link
Filter types
Eight facet types cover selection, ranges, search and result controls.
| Type | What it does |
|---|---|
| Checkbox | Tick several values at once (AND / OR matching). |
| Radio | Choose a single value from a list. |
| Dropdown | A compact select menu for long value lists. |
| Price / number slider | Drag a min–max range over a numeric field or price. |
| Search box | Match a keyword against titles and content, live. |
| Sort | Order results — price, rating, date, popularity and more. |
| Pager | Page through, or load more, results. |
| Active filters | Removable chips of the current selection. |
Data sources
Each facet pulls its values from your content — taxonomies, meta, WooCommerce and more.
| Source | Values it exposes |
|---|---|
| Taxonomy | Categories, tags and WooCommerce attributes (pa_*). |
| Custom field | Any post meta value, including WPStack Fields. |
| Post type | Narrow across one or more content types. |
| Author | Filter by who published an item. |
| Date | Year and month buckets from the publish date. |
| WooCommerce | Price, stock status, on-sale and average rating. |
Live filtering & UX
Every interaction updates the page in place, with no reload.
- Results and the result count refresh instantly over AJAX
- Per-option counts show how many items each value would return
- Active selections appear as removable chips, with a “clear all”
- The selection is written to the URL query string as it changes
- The browser back button restores a previous filter state
Placement
Put the filter UI and its results wherever you need them — three ways.
Shortcodes
Render a filter set’s UI (its facets).
Render the results grid the facets filter.
Elementor widgets
- Filter — the facet UI
- Listing — the results grid
- Result Count — a live “N results” counter
- Active Filters — the removable selection chips
Elementor Loop Grid
Already using an Elementor Loop Grid? Flip a single Enable WPStack Filter switch on the grid and it becomes the filtered listing — no separate Listing widget needed.
WooCommerce
Filter a shop the way customers expect — price, stock, offers, rating and sort.
| Facet | What it filters |
|---|---|
| Price range | A min–max slider over product price, including variable products. |
| Stock status | In stock, out of stock or on backorder. |
| On sale | Only products currently on sale. |
| Rating | Average star rating and up. |
| Attributes | Any product attribute taxonomy (pa_*). |
| Sort | Price, rating, popularity, newest and more. |
Reindexing
Filter builds its own value index so filtering stays fast, and keeps it in sync automatically.
Instead of querying meta and taxonomies on every request, Filter maintains a purpose-built value index. It auto-reindexes incrementally whenever content changes, and you can run a full batched rebuild from the admin at any time.
- A dedicated value index powers fast, low-load filtering
- Incremental reindex updates only the items that changed
- A batched full rebuild runs in the background from the admin
- An index-health check shows whether anything is pending
Settings
Tune how filters look, when they apply, and how filtered URLs behave for SEO.
| Setting | Type | Default | What it does |
|---|---|---|---|
| Accent & layout | styles | Sidebar | Accent colour, sidebar or top-bar layout, and corner style for the UI. |
| Filtering mode | select | Instant | Apply filters instantly as they change, or batch them behind an “Apply filters” button. |
| Update URL | toggle | On | Mirror the current selection into the URL query string. |
| Per-option counts | toggle | On | Show how many items each value would return. |
| Ghost options | toggle | Off | Keep 0-count values visible but disabled instead of hiding them. |
| SEO | group | — | Canonical tag and optional noindex on filtered result URLs. |
Filtering mode
Choose Instant to refresh results the moment a facet changes, or the “Apply filters” button mode to let visitors stack several choices and apply them in one batch — handy on large catalogues or slow connections.
SEO & accessibility
Filtered URLs stay search-friendly, and the whole UI is keyboard- and screen-reader-ready.
SEO
Filtered result pages carry a canonical tag back to the base archive, and you can optionally add noindex to filtered URLs — so crawlers don’t index every filter combination while visitors still get shareable links.
Accessibility
A full accessibility pass adds keyboard operation, ARIA roles and states, and managed focus, so the filter UI works with a keyboard and assistive technology.
FAQ
No. Filtering runs over AJAX against a built value index — results, per-option counts and the result count update in place, and the selection is written to the URL for sharing and back-button support.
No. Filter works on any posts or listings using taxonomies, custom fields, post type, author and date. WooCommerce is only needed for the price, stock, on-sale and rating facets.
Three ways: the [wpstack_filter] and [wpstack_listing] shortcodes, four Elementor widgets (Filter, Listing, Result Count, Active Filters), or by flipping the WPStack Filter switch on an Elementor Loop Grid.
Filter keeps its own value index so filtering stays fast without heavy queries. It reindexes incrementally when content changes, and you can run a batched full rebuild from the admin after bulk changes.
Filtered pages get a canonical tag back to the base archive, and you can optionally noindex filtered URLs — so crawlers stay on the canonical page while visitors keep shareable links.
Changelog
noindex for filtered result pages.