FacetWP Bricks - WordPress Plugin
FacetWP Bricks is a plugin designed specifically for WordPress, offering the functionality of adding facets to posts for FacetWP. This plugin enriches your website by allowing users to easily filter and search through posts based on specific criteria. With FacetWP Bricks, you can enhance the user experience by providing a streamlined way for visitors to find the content that is relevant to their needs.

Plugin Features
When implementing this plugin, you can enjoy a wide range of benefits. First and foremost, FacetWP Bricks simplifies the process of adding facets to your posts, enabling you to quickly configure and customize your facets without the need for coding. This makes it an excellent choice for both beginners and experienced users, as it eliminates the need to hire a developer for such tasks.
This plugin seamlessly integrates with FacetWP, a popular WordPress plugin that provides advanced filtering functionality. By combining the power of both plugins, you can create dynamic and interactive filtering options for your website. Whether you want to filter posts by categories, tags, custom fields, or any other criteria, this plugin allows you to do so effortlessly.
FacetWP Bricks offers a user-friendly interface that makes it easy to set up and manage your facets. The intuitive drag-and-drop builder enables you to arrange and customize your facets according to your preferences. You can choose from a variety of facet types, including checkboxes, dropdowns, sliders, and more, ensuring that the filtering options complement your websites design and layout.
This plugin also provides extensive control over how your facets appear to users. You can choose the order in which facets are displayed, set default selections, and even limit the number of facet choices visible at a time. Such flexibility allows you to create a smooth and personalized filtering experience, enhancing user engagement and satisfaction.
Furthermore, FacetWP Bricks offers seamless integration with popular page builders like Elementor, Beaver Builder, and Divi. This means that you can easily incorporate facets into your custom page designs, ensuring a cohesive and consistent user experience throughout your entire website.
In conclusion, this WordPress plugin, FacetWP Bricks, is a versatile and efficient tool for adding facets to posts. By integrating with FacetWP and providing a user-friendly interface, this plugin empowers website owners to create a highly interactive and personalized filtering experience for their visitors. Whether you are a beginner or an experienced user, this plugin offers the necessary features to enhance your websites functionality and make content discovery a breeze.
FacetWP Bricks: A Practical Guide to Filters in Bricks Builder
FacetWP Bricks is useful when your catalog, archive, listing database, or WooCommerce storefront is already built in Bricks Builder, but visitors still need proper filtering by categories, attributes, price, search, sorting, or other parameters. FacetWP itself handles facets, data indexing, and AJAX result updates, while the Bricks integration connects those facets to Posts, Query Loop, and Products elements inside the builder.
This guide does not repeat the plugin's marketing copy. What matters here is understanding how it actually works: which Bricks listing can be connected to FacetWP, where to enable the Use FacetWP setting, why Query Loop requires the right nesting structure, when re-indexing is necessary, how to test the result, and which issues most often break filtering. If you are still evaluating options, this article will help you decide whether FacetWP Bricks is the right fit for your project. If the plugin is already installed, it will help you get your filtering page into a stable, production-ready state.
The core idea is simple: FacetWP needs to see one specific list of posts or products, understand its query, and be able to update that list after a filter is selected. In Bricks Builder, a listing can be created in several different ways, so the integration is not just a matter of dropping in one shortcode. You need to choose the right listing type, enable FacetWP support in its settings, place the facets next to the results, and make sure pagination, Query Loop caching, and interactive Bricks elements do not conflict with AJAX updates.
When the FacetWP and Bricks combination actually makes sense
FacetWP Bricks is not something you should add to every page with cards. It makes sense where users are actively narrowing down a large data set. Typical use cases include real estate catalogs, expert directories, training material libraries, recipe archives, product storefronts, project catalogs, document libraries, company directories, or post collections with multiple taxonomies. If a page only has a few items and a basic category menu is enough, FacetWP is probably overkill: it adds a separate index layer, facet settings, and extra things to maintain.
FacetWP's biggest strength is faceted search. Instead of choosing one site section, the user builds a combination of conditions: property type, city, price range, service availability, rating, tag, custom field, keyword phrase. After each selection, FacetWP recalculates the results and can also update the available values in other facets. That is especially useful in Bricks because the page designer keeps full control over the card layout, while the filtering logic stays in a dedicated plugin built for that job.
This setup works well for teams already building templates in Bricks who do not want to move their catalog into a separate listing builder. You can keep your existing Bricks structure, dynamic data, conditional visibility, card design, and WooCommerce elements, while adding facets on top of them. But there is one limitation you need to accept upfront: a page should only have one FacetWP-enabled Bricks element. If the layout contains two independent catalogs, such as "new products" and "popular products," you should not try to filter both with the same set of facets. Either keep one main listing, move the second block to another page, or leave it unfilterable.
You should also not expect FacetWP Bricks to fix bad data structure. If product attributes are stored inconsistently, some values live in different custom fields, and taxonomies mix type, purpose, and status, the filters will never feel reliable. Before implementation, it helps to normalize the data model: separate taxonomies for categories and attributes, numeric fields for ranges, clean values for checkboxes, and a consistent format for locations and prices. Then the facets actually help visitors instead of showing dozens of nearly identical options.
How FacetWP Bricks connects facets to a listing
There are two independent parts on the page. The first is the FacetWP facets themselves: checkbox, dropdown, search, slider, pager, sort, reset, user selections, and other types you create in FacetWP settings. The second is the Bricks listing that outputs posts or products. The integration exists so FacetWP does not just render filters, but also understands which Bricks query it should modify after a value is selected.
According to the official FacetWP documentation, Bricks supports three listing options: the Posts element, Query Loop inside a Container, Block, or Div, and the Products element for WooCommerce. That distinction matters in practice. If your layout is built with some other element, the mere fact that it shows cards on the page does not mean FacetWP will automatically detect the correct list. In that case, you either rebuild the listing with a supported element or manually add support through the query vars filter, if that is justified and you clearly understand which Bricks ID you are targeting.
The Posts element is the most straightforward setup. You add Posts to the page, configure the post source, item count, card layout, grid, and pagination, then enable Use FacetWP in the element settings. The facets are displayed nearby through a Shortcode element with a shortcode like [facetwp facet="category"]. The facet name in the shortcode must match the facet name in FacetWP settings, not the visitor-facing label.
With Query Loop, the critical point is not to confuse the wrapper with the loop itself. FacetWP needs an outer Div that helps it auto-detect the listing. Inside that, you place a Container, Block, or Div with Use query loop enabled. Once the loop is enabled, the Use FacetWP option becomes available. Inside the loop, you place the card elements, such as a Heading with the dynamic tag {post_title}, an image, excerpt, buttons, or price. In Structure, the correct logic looks like Div > Query Loop > Heading followed by the rest of the card elements. If the loop is not where the integration expects it, FacetWP may fail to find the listing or update the wrong area.
With Products, the logic is similar to Posts, but there are WooCommerce-specific details. The Products element is available on sites running WooCommerce and can be connected to FacetWP through the same Use FacetWP setting. FacetWP documentation specifically notes that Products does not have its own pagination setting the way Posts does, so page navigation is usually handled with a Pager facet. You should also avoid adding separate Bricks Pagination or Products Pagination to Products and expecting them to work with FacetWP. For a WooCommerce catalog, it is better to choose one clear path: FacetWP controls filters and pagination, while Bricks handles the product card design.
Preparing your data before installation and setup
A good FacetWP Bricks setup starts not in Bricks Builder, but in your WordPress data structure. Facets pull values from taxonomies, fields, WooCommerce attributes, authors, dates, prices, and other sources. If those sources are inconsistent, the user will see noise. For example, the same attribute might be stored as "Red," "red," "Red," and "red." Formally, those are different values, so FacetWP may show redundant options or return unexpected results.
Before installation, think through which conditions visitors actually need. For a real estate catalog, that could be property type, neighborhood, number of rooms, price range, and deal status. For a content library, it might be topic, difficulty level, format, author, and title search. For a store, categories, attributes, price, stock status, and sorting are more likely. The more precise your facet map is, the lower the risk of building a heavy filter panel that looks powerful but gets in the way of decision-making.
Pay special attention to numeric data. Price range, square footage, duration, rating, and similar values should be stored as numbers, not arbitrary strings with units mixed in. If the field contains a mixture of "from 1000," "$1,000," "1 000," and "1000.00," a slider or number range will be hard to configure properly. It is better to normalize the raw value in a dedicated field and keep the nicely formatted label for the Bricks card display.
For a WooCommerce catalog, decide in advance which parameters should be global attributes, which should be categories, and which should not be filterable at all. FacetWP can work with WooCommerce data, but it does not replace basic catalog discipline. A "color" attribute should be an actual attribute, a brand should be a separate taxonomy or attribute, price should use the native product field, and stock status should remain a product status. If everything is stuffed into the product description, faceted filtering will not have a reliable source to work from.
It also helps to use a test page or staging copy. FacetWP indexes data into its own table, and Bricks may cache Query Loop. On a live site with a large catalog, it is better to validate one listing, a few facets, and pagination first, then expand the configuration. That makes it much easier to see whether the problem comes from the data source, indexing, Bricks structure, cache, or third-party JavaScript.
Installation, licensing, and initial activation
To make this work, you need the core FacetWP plugin, Bricks Builder installed and active, and the FacetWP Bricks integration add-on. The add-on does not replace FacetWP itself. It only adds the connection between FacetWP and supported Bricks elements. After installation, confirm that FacetWP settings are available in the WordPress admin and that the supported Bricks element shows the Use FacetWP toggle.
The first step is creating facets in FacetWP. Do not start with a complex Bricks page. Create one simple facet, such as categories or search, save it, and run Re-index. FacetWP documentation explicitly states that after adding or changing facets, you should save the settings and trigger re-indexing. FacetWP analyzes the site and stores facet data in its own table for fast lookups. Until the index is built, the filter may show empty values or fail to change the results.
The second step is building a minimal Bricks listing. For testing, a page with one Posts element or a simple Query Loop that outputs a post title is enough. Enable Use FacetWP on that exact element, add a Shortcode element with one facet shortcode, and open the page on the front end. If the filter changes the list, the core connection is working. Only after that should you bring back the full card design, extra facets, sorting, reset, and pager.
The third step is making sure the page does not contain a second FacetWP-enabled Bricks element. This is not a cosmetic limitation. FacetWP needs to know which query is the main one. If Use FacetWP is enabled on multiple Bricks elements, the behavior becomes unpredictable: the filter may change the first list, the second list, both partly, or neither. For secondary blocks like "recommended" or "related," use regular Bricks queries without Use FacetWP.
After the basic test, move on to the settings for each facet. Make sure Source points to the correct taxonomy, custom field, or WooCommerce data. Check the label, facet type, value sorting, empty option behavior, multi-select behavior, and output format. Do not add ten facets at once. Add them one at a time, save, run Re-index when needed, and test the front end. It feels slower, but it makes troubleshooting dramatically easier.
Choosing the right listing type: Posts, Query Loop, or Products
The Posts element works well when you are displaying regular posts, a custom post type, or a simple grid where Bricks' built-in logic is enough. It is a good starting point for a blog, project database, portfolio, specialist directory, or content archive. It is easier to connect to FacetWP, easier to set up with its own pagination through Pagination > Show, and easier to explain to an editor as the main listing on the page.
Query Loop is the right choice when the card is more complex. In Bricks, Query Loop lets you build the structure manually: outer wrapper, loop element, nested elements, dynamic tags, conditions, custom fields, and a custom grid. This is also where nesting mistakes happen most often. FacetWP expects a wrapper containing the element with Query Loop and Use FacetWP enabled. If the designer accidentally places the Heading, Image, or Button next to the loop instead of inside it, the card may still look fine in the editor, but front-end updates after filtering will behave strangely.
The Products element is built for WooCommerce storefronts where product cards should stay in Bricks while filters work with product data. Here it is especially important not to mix different pagination systems or enable extra elements that conflict with FacetWP. If you need pagination, a Pager facet is usually the simpler choice. If you need Add to cart, quick view, popups, or accordions inside the card, test those elements after selecting a facet, because the AJAX refresh rebuilds part of the DOM and some Bricks components need to be reinitialized.
| Bricks option | When to choose it | What to watch for |
|---|---|---|
| Posts | A standard post list or custom post type with a straightforward grid. | Enable Use FacetWP and use built-in pagination or a Pager facet. |
| Query Loop | A complex card layout, manual structure, dynamic fields, and flexible markup. | Keep the wrapper and loop nesting correct, and target the right Query for pagination. |
| Products | A WooCommerce catalog where filters need to work with products, prices, and attributes. | Do not use separate Bricks Products Pagination, and test Add to cart after AJAX updates. |
If you are not sure, start with the simplest element that solves the problem. A common mistake is jumping straight into a complex Query Loop with conditions, popups, nested accordions, and multiple data sources. When filtering fails, it becomes unclear whether the problem is FacetWP, Bricks, the query, a JS component, or the card structure. First get filtering working on a single post title, then add design and complexity.
Configuring Query Loop without the usual structure mistakes
Query Loop in Bricks is powerful, but it requires a clean structure. For FacetWP, you need an outer Div that acts as the wrapper. Inside it, create a Container, Block, or Div with Use query loop enabled. Once Query Loop is enabled, the Use FacetWP toggle appears. Then place the card elements inside the loop: title, image, price, excerpt, button, meta, and additional fields. In Structure, this should read as a nested chain, not a set of sibling elements.
Why does the wrapper matter? FacetWP does not update the whole page. It updates the results area. If it cannot auto-detect the post listing, it does not know which container to replace after a filter is selected. The error "FacetWP was unable to auto-detect the post listing" is often caused not only by the Use FacetWP toggle, but also by Bricks caching Query Loop or by a structure that prevents FacetWP from identifying the list correctly. That is why troubleshooting usually includes both Bricks > Settings > Performance and the element structure itself.
Place the Shortcode element with facets outside Query Loop, but in a logically adjacent part of the page. For example, the filters can sit in the left column while the wrapper with results is in the right. Do not place a facet inside the card if it is supposed to control the entire list. Inside the loop, the facet would repeat for every card, which is almost always wrong and creates unnecessary UI controls.
If you use a separate Bricks Pagination element with Query Loop, it must sit in the same parent container as the element with Query Loop and FacetWP enabled. In the Pagination Query setting, you must select that exact Container, Block, or Div. If the pagination points to a different query or sits outside the correct container, page switches may become detached from the facets, reset URL parameters, or show the wrong number of results.
Do not use query offset with Bricks Posts or Query Loop if the list is meant to be filtered by FacetWP. FacetWP documentation describes offset as an incompatible scenario because the offset is still applied after facet selection, and WordPress also uses offset when calculating pagination. In practice, that usually looks like this: the user selects a filter, the first matching entry disappears, page 2 shows a strange set of results, and the result count no longer matches the cards. If you need to exclude the first few posts, it is better to solve that at the query or design level instead of enabling offset on the main filtered listing.
Facets, index, and re-indexing: what to check in the admin
FacetWP is fast not because it scans every post on the fly every time, but because it indexes facet data in advance. Indexing is the process where FacetWP analyzes the site and stores facet data in a custom database table. That is why after creating a facet, changing Source, adjusting the type, or modifying indexing logic, you need to run Re-index. If you do not, the front end may show stale values, empty results, or ignore the new facet entirely.
After saving FacetWP settings, the plugin will usually show a prompt when re-indexing is needed. But on a real project, it is better to treat it as a rule: added a facet - Re-index; changed the source - Re-index; changed facet settings - Re-index; imported a large batch of products or posts programmatically - Re-index; changed the term hierarchy - Re-index; added code that affects indexing - Re-index. After routine editing of a single post, FacetWP may update the index automatically, but bulk operations and structural changes are always worth checking manually.
While the indexer is running, keep the settings screen open if possible. FacetWP documentation recommends that so you can monitor the process. If you stop the indexer, FacetWP does not leave a half-finished index behind as a working table, but the results may not reflect current data until the next successful re-index. On a large catalog, plan re-indexing for a quiet period and make sure your facet sources are correct before running it, so you do not waste time rerunning the indexer because of a typo.
If the catalog is large, also review your indexable post types. FacetWP can show which post types are being indexed. If the post type you need is missing, the facet will not work correctly with its data. If unnecessary types are being indexed, the process may take longer than it should. For complex sites, FacetWP provides indexing hooks, including ways to modify the indexer's query args, but those changes belong to developers and should only be made after testing on a site copy.
At the facet level, do not confuse the user-facing label with the technical name. In Bricks, the shortcode uses the facet name, for example [facetwp facet="property_type"]. If you rename the facet in settings, the old shortcode will stop outputting the correct element. That is why technical names are best set once and left alone, while visible labels can be edited separately.
Step-by-step example: a filterable project catalog in Bricks
Let's walk through a practical example without tying it to one specific niche: a studio website has a project catalog, and visitors need to filter it by service type, industry, and search phrase. The cards are already designed in Bricks, so no one wants to rebuild the catalog in another builder. This is exactly the kind of task FacetWP Bricks handles well: Bricks takes care of the card design, and FacetWP handles the filters, URL parameters, and result updates.
Start with the data. Create or verify a custom post type called "projects." Use one taxonomy for service type, a separate taxonomy for industry, and the post title plus content for quick text search. If the projects were imported from a spreadsheet, make sure those terms were assigned as actual WordPress terms, not just dumped as plain text into a random field. The Bricks card may display service and industry nicely, but FacetWP still needs those values to come from a stable source.
Next, create the facets. Add one checkbox facet for service type, a second dropdown or fSelect facet for industry, a third Search facet for text search, and a fourth Reset facet for quick reset. If there are many projects, add a Pager facet as well. Do not add Sort at the start until the basic filtering works. Save the facets and run Re-index.
In Bricks, create the catalog page. Build a two-column layout: filters on the left, results on the right. In the left column, insert Shortcode elements with your facets. In the right column, create an outer Div for the results, and inside it place the Query Loop element. Enable Use query loop, set the query to the projects post type, then enable Use FacetWP. Inside the loop, build the card with a featured image, a Heading using {post_title}, taxonomy terms, an excerpt, and a project link.
Open the page on the front end in a private window. Select one service type. The expected result is this: the URL gets FacetWP parameters, the cards update without a full reload, the other facets stay in place, reset clears the selection, and the pager keeps the chosen filter. Then try a combination of two facets, text search, and a move to the next page. If all of that works, only then should you add animations, popups, extra conditions, and a more complex card layout.
Test the empty state too. Bricks Posts and Query Loop can display a No Results message or template in Query settings. If you leave that field empty, users may just see the cards disappear, which looks like a broken page. It is better to display a short message such as "No matches found. Reset your filters or change your search." For Products, FacetWP uses WooCommerce behavior, so the empty state should be tested separately there as well.
Pagination, sorting, reset, and URL behavior
Pagination in FacetWP Bricks depends on the listing type you choose. For the Posts element, you can enable built-in Pagination > Show or use a Pager facet. For Query Loop, you can add a Bricks Pagination element, but it must sit in the correct container and point to the correct Query. For Products, it is safer to rely on a Pager facet, because separate Bricks Pagination or Products Pagination elements should not be used with FacetWP in this setup.
From a practical standpoint, the Pager facet is often easier both for users and for long-term support. It belongs to FacetWP, understands the current filter state, and does not require you to guess which Bricks query was selected in the Pagination element. If the design specifically calls for Bricks Pagination, test it first on a minimal Query Loop and only then add the rest of the facets. Any desynchronization between pagination and filtering hurts UX very quickly: the user selects a city, lands on page 3, and sees nothing even though matching entries do exist on page 1.
A Sort facet is useful when users have a clear reason to change the order: price, publish date, popularity, rating, alphabetical order, area. Do not add sorting just for completeness if it duplicates the default order or makes no sense. For WooCommerce, price and popularity can be useful. For a specialist directory, alphabetical order and rating are more practical. For a document library, date and topic are more likely. Every sorting option should map to a real field or query rule.
A Reset facet is almost mandatory in any catalog. When visitors combine several conditions, they need one obvious way to get back to the default state. You can also display User Selections so active filters appear as separate chips. That matters even more on mobile, where the filter panel may be collapsed and the user cannot immediately see why there are so few results.
FacetWP URL parameters make it possible to share a link to a filtered state. Test that a link with selected facets opens correctly in a new window, does not reset Query Loop, and does not lead to an empty page because of cache issues. If the catalog is part of your SEO strategy, do not turn every filter combination into an indexable page without a plan. Faceted navigation can create a huge number of URL variants, so it is better to define canonical, noindex, or parameter-handling rules with your SEO specialist ahead of time.
WooCommerce scenario: products, price, and the Add to cart button
WooCommerce with Bricks and FacetWP looks appealing: the designer builds the product card, the marketer gets filters for attributes, price, and stock, and visitors can narrow the storefront quickly. But WooCommerce is also where extra interactive elements show up most often: the Add to cart button, variation swatches, quick view popups, accordions for specs, sale badges, and lazy-loaded images. After a FacetWP AJAX refresh, some of those elements may need to be reinitialized.
Start with a simple Products element or a Query Loop for products. Enable Use FacetWP, add a product category facet, a price facet, and Reset. Make sure category selection changes the products, price narrows the list, and reset returns the original catalog. Only after that should you enable a more advanced card with Add to cart and additional UI elements.
If Bricks has AJAX add to cart enabled, the official FacetWP documentation warns that the button may stop working after interacting with facets. The reason is straightforward: FacetWP refreshes the results area, and the button handler attached to the old DOM elements does not always reattach automatically to the new ones. For this scenario, the documentation recommends reinitializing the behavior after the facetwp-loaded event. In practice, that means you need to test the fix specifically after a filter is selected, not just on the initial page load.
Do not add PHP or JS snippets blindly. If Add to cart works before a facet is selected and breaks after that, first confirm the issue on a test page with a minimal product card. Then add the documented snippet in a child theme or a snippets plugin, clear cache, and test again: first click before filtering, select a facet, second click after filtering, add to cart, mini-cart, or notice. If the site uses third-party WooCommerce plugins, they may also need their own reinitialization.
The same logic applies to accordions and popups. If a Bricks element works on the first load but stops opening after filtering, you need to call the relevant Bricks initialization again after the AJAX refresh. FacetWP documentation describes that behavior for both accordions and popups. For popups, it is also important to enable Fetch content via AJAX in the template settings, because without it Bricks may load popup content outside the area FacetWP refreshes.
Manual integration through bricks/posts/query_vars
In most cases, use the Use FacetWP setting wherever it is available. That is the clearest and most maintainable path. But sometimes you need to manually add FacetWP support to a query element or adjust query arguments at the same time. For that, FacetWP points to the Bricks filter bricks/posts/query_vars, where you can set $query_vars['facetwp'] = true for a specific element.
The key detail is the correct Bricks ID. In the Bricks interface, you may see a CSS ID like #brxe-vsukfs, but the filter requires not the full CSS ID, only the unique Bricks ID, for example vsukfs. FacetWP documentation specifically warns that CSS ID and Bricks ID are not the same thing. If you insert the wrong value, the code may look correct, but FacetWP will not attach to the intended element.
A minimal example looks like this. Replace vsukfs with your element's Bricks ID, and add the code only in a child theme, through a trusted snippets plugin, or through a documented Custom Hooks mechanism if that is what the site uses.
add_filter( 'bricks/posts/query_vars', function( $query_vars, $settings, $element_id ) {
if ( $element_id === 'vsukfs' ) {
$query_vars['facetwp'] = true;
}
return $query_vars;
}, 10, 3 );
Before adding code like this, create a backup and record the page's original behavior. After adding it, open the page as a regular visitor, select a facet, and check the result count, pagination, and reset behavior. If anything goes wrong, remove the snippet and go back to the Use FacetWP setting in the interface. Manual code should not become the default configuration method just because it feels "more professional." It is for edge cases where the visual setting is unavailable or not sufficient.
If you are changing other query vars in the same filter, do not mix several jobs together without comments. One purpose is easy to understand: enable FacetWP. Another is easy to understand: change the post type or meta query. But when everything lives in one anonymous block with no explanation, it becomes hard to understand a few months later why filters only work on one page or why the catalog excludes some entries. A minimal comment with the page name and the purpose of the change saves maintenance time.
Testing the result before launch
Your testing should imitate a real visitor, not just an administrator inside the Bricks editor. Open the page in a private window or in a browser session without admin login. Test each facet individually, then combinations of facets. Make sure the result count or card count matches expectations, the URL updates correctly, the browser Back button restores the previous state, Reset clears the selection, and pagination keeps the active parameters.
Check empty states. Enter a word into the Search facet that does not exist in the catalog. Select a combination of conditions that should return no results. The user should see a clear message, not an empty grid with no explanation. For Posts and Query Loop, you can define that message in Query settings. For Products, verify how FacetWP and WooCommerce render the empty state and whether any technical text appears that does not match the site's tone.
Check the mobile layout. A facet panel that looks fine on desktop can become too long on a phone. If there are many facets, use collapsible groups, a flyout approach, or a separate "Filters" button. The important part is not to hide the active state. Users should still understand that filters are currently applied even if the panel is closed. User Selections, reset, and a short result-count message help with that.
Check performance too. FacetWP is optimized through indexing, but heavy Bricks cards, large images, third-party scripts, complex meta queries, and aggressive caching can still slow updates down. If the page takes too long to respond after selecting a facet, simplify the card and the query, check the browser console, temporarily disable third-party widgets inside the card, and compare Query Loop against a simpler Posts element. Do not begin troubleshooting by adding more optimization plugins. First identify what is actually slowing the page down.
Also review editor permissions and the data update workflow. If a content manager adds a new category or imports products, who is responsible for running Re-index? If the site regularly receives imports from a CRM or ERP, the team needs a clear process for keeping the index current. On some projects, automatic indexing is enough. On others, you need manual re-indexing after bulk operations or a cron-based process. The important thing is to document it instead of remembering it only after a client complains.
Troubleshooting common FacetWP Bricks issues
FacetWP cannot find the listing
If you see the message "FacetWP was unable to auto-detect the post listing," first check whether Use FacetWP is enabled on a supported Bricks element. Then confirm that the page does not contain multiple FacetWP-enabled elements. For Query Loop, check the wrapper and nesting: outer Div, loop element inside it, card elements inside the loop. If the structure is correct, open Bricks > Settings > Performance and disable Cache query loops, because the official FacetWP documentation points to that setting as the fix for this scenario.
The filter displays, but the results do not change
Most often, the cause is an incorrect shortcode, an outdated index, or a listing that is not properly connected. Verify the facet name in the shortcode against the technical name in FacetWP. Run Re-index after saving the facet. Make sure Use FacetWP is enabled on the exact Posts, Query Loop, or Products element that outputs the results. If the page contains a similar hidden query, temporarily remove or disable it for testing.
Pagination disappears after filtering or empty pages start appearing
Check which pagination type is in use. For Query Loop, Bricks Pagination must sit in the same parent container and point to the correct Query. For Products, do not use separate Bricks Pagination or Products Pagination elements together with FacetWP. If query offset is enabled, turn it off: offset does not play well with faceted filtering and breaks page calculations. If you need to skip some entries, solve that with separate logic instead of using offset in the filtered query.
Facets show outdated values
Run Re-index. Old values often remain after changing the source, editing terms, importing data, or modifying custom fields. If imports happen regularly, review how that process interacts with indexing. FacetWP may update the index automatically for single edits, but bulk imports, hierarchy changes, and custom indexing hooks need separate oversight.
Add to cart, accordion, or popup breaks after selecting a filter
This is a sign that the element was initialized on the first page load, but was not reinitialized after the FacetWP AJAX refresh. For AJAX add to cart, accordions, and popups, FacetWP documentation provides separate recipes based on the facetwp-loaded event. Reproduce the issue on a minimal card, add the documented snippet in a safe location, clear cache, and test again. For popups, also verify Fetch content via AJAX in Bricks popup template settings.
Filtering works for the administrator, but not for visitors
Compare the page in a private window and under an admin session. Possible causes include page cache, JavaScript optimization, different Bricks display conditions, post type access restrictions, hidden WooCommerce products, or personalized content. Temporarily disable page cache for the catalog page, check the browser console, and make sure FacetWP scripts are not being combined or deferred in a way that breaks AJAX.
There are too many facets on the page and the catalog has become hard to use
Reduce the panel to the conditions that actually help people choose. Hide rare or technical attributes inside expandable groups, add a Search facet, and use Reset and User Selections. Faceted filtering is valuable not because of the number of controls, but because it speeds up decision-making. If users cannot tell the difference between three similar facets, it is better to merge the data or change the catalog structure.
Optimizing UX, speed, and maintainability
FacetWP Bricks is often used on pages where users expect to compare options. That means technical functionality alone is not enough. The interface also needs to feel controlled and predictable. Facets should appear before or next to the results, active conditions should remain visible, reset should be available without scrolling, and an empty result should explain what to do next. If the filter panel is longer than the results themselves, your priorities probably need a second look.
For speed, start with the cards. Often the AJAX update feels slow not because of FacetWP, but because the Bricks template is too heavy: multiple images, nested components, popups, third-party badges, or too many dynamic queries inside each card. Simplify the listing card and move detailed information to the post or product page. In most listings, users only need the image, title, key details, price or status, and a button.
Use images carefully. If your product or project cards include large photos, enable lazy loading where it does not hurt the first screen, and serve image sizes appropriate for the grid. FacetWP refreshes the listing, but the browser still has to load the new images. If every card pulls a huge original file, the filtering experience will feel heavy even when AJAX itself responds quickly.
For SEO, do not index every possible filter combination without a plan. Faceted navigation can create thousands of parameterized URLs. That is useful for UX, but risky for indexing if search engines start crawling endless combinations of color, price, brand, and sorting. On commercial sites, teams usually decide in advance which landing pages should exist as standalone SEO pages and which combinations should remain internal filters only.
For maintainability, leave a short technical note in the project documentation: where the catalog page lives, which Bricks element is FacetWP-enabled, which facets are in use, when to run Re-index, which Bricks settings must stay off, and which snippets were added for AJAX-based components. A month from now, that note will save more time than it seems. It is especially important to record the Bricks ID if you used the manual bricks/posts/query_vars filter.
Who this plugin is for and when another approach may be better
FacetWP Bricks is a strong fit for sites where Bricks is already the primary design tool and filtering needs to go beyond simple categories. It is a good choice for data-heavy catalogs where visitors combine multiple parameters and expect fast feedback. The plugin is especially useful when the project needs several facet types, indexing, AJAX updates, WooCommerce support, and a clean way to integrate filters into the Bricks design.
The plugin may not be the right choice if the catalog is extremely simple and only needs one category filter. In that case, a standard WordPress archive, a category menu, or a simple Bricks page may be easier and cheaper to maintain. FacetWP Bricks also should not be your first pick if the data is unstructured and the team is not ready to clean it up. Facets do not fix chaos. They make it visible.
Another risk area is projects with several independent filterable zones on the same page. Since multiple FacetWP-enabled Bricks elements on a single page are not supported, more complex landing pages with multiple catalogs need a different structure. Sometimes the better solution is to split those catalogs across separate pages or keep additional blocks static.
If the site relies heavily on third-party WooCommerce components inside the cards, plan time for AJAX refresh testing. Add to cart, quick view, popups, accordions, swatches, and other interactive elements may require reinitialization. That is solvable, but at that point you are doing development work, not a quick two-click setup.
FacetWP Bricks FAQ
Can I use multiple FacetWP-enabled Bricks elements on one page?
No. That is not a supported scenario for this integration. A page should have one main FacetWP-enabled Bricks element. Additional lists can remain regular Bricks queries without a FacetWP connection, or be moved to separate pages.
Which is better for a catalog: the Posts element or Query Loop?
If you need a simple post grid, start with the Posts element. If the card is more complex and requires a manual structure, use Query Loop, but watch the wrapper and loop nesting carefully. For a WooCommerce storefront, consider the Products element or a Query Loop for products, then test buttons and interactive elements separately after AJAX filtering.
Do I need to run Re-index after every change?
You should run Re-index after adding a facet, changing the source, changing facet settings, performing a bulk import, changing the term hierarchy, or adding code that affects indexing. After a normal save of a single post, FacetWP may update the index automatically, but in questionable cases it is better to verify it manually.
Why is the facet visible, but not filtering anything?
Check the facet name in the shortcode, the freshness of the index, whether Use FacetWP is enabled on the correct Bricks element, and whether a second FacetWP-enabled element exists on the page. For Query Loop, also review the structure and disable Cache query loops if the auto-detect error appears.
Can I use Bricks Pagination with FacetWP?
With Posts, you can use built-in pagination or a Pager facet. With Query Loop, a separate Bricks Pagination element is possible, but it must live in the correct parent container and target the correct Query. With Products, do not use separate Bricks Pagination or Products Pagination elements in a FacetWP setup. A Pager facet is the better choice.
Why should I not use query offset?
Offset is applied to the query after facet selection as well, and it also affects WordPress page calculations. Because of that, the filter may skip valid entries and break pagination. For a filterable listing, it is better not to use offset and instead find another way to exclude or highlight posts.
Where should facet shortcodes be placed in Bricks?
Usually, facets are placed in Shortcode elements next to the listing: above the results, in a sidebar, or in a mobile filter panel. Do not place a global facet inside Query Loop, or it may repeat inside every card.
What should I do if popups or accordions break after filtering?
Check whether they work before a filter is selected and break specifically after the AJAX refresh. If so, use the documented FacetWP approach with reinitialization after the facetwp-loaded event. For Bricks popups, also check the Fetch content via AJAX setting.
Is FacetWP Bricks suitable for a small site?
Yes, if filtering genuinely helps visitors. But for a small list with one category, the plugin may be unnecessary. Weigh the benefit of facets against the extra indexing, maintenance, and AJAX testing they introduce.
Bottom line: how to launch FacetWP Bricks safely
The best approach is not to build the perfect catalog in one pass. First prepare the data, create one facet, run Re-index, connect one supported Bricks listing, and test filtering on the front end. Then add the remaining facets, pagination, reset, empty state, WooCommerce elements, and mobile UX. That order makes it much easier to isolate weak points instead of blending five different problems into one.
FacetWP Bricks is especially valuable when your card and page design already lives in Bricks Builder, but the filtering needs to be professional: indexed, AJAX-powered, flexible in facet types, and intuitive for visitors. But the plugin also requires discipline: one active listing per page, the correct Query Loop structure, a fresh index, careful cache handling, no offset, and testing of interactive elements after result updates.
If your product or catalog page is ready for real testing, move on to downloading and validating it on a site copy: download FacetWP Bricks. Start with the smallest possible listing, document the working setup, and then gradually move it into the full design. That way, you get more than a nice-looking filter panel. You get a stable selection tool that helps visitors find the right content, product, or listing faster.
Additional validation of the FacetWP and Query Loop setup in Bricks
If the basic setup is already complete, do not assume the catalog is ready right away. FacetWP Bricks has one important quirk: the filter may look correct on the page but still operate on the wrong post list if the Query Loop in Bricks is built too loosely or if the page still contains several similar lists. That is why after the first launch you should validate not only the visual side, but also the data path: which posts enter the query, which fields FacetWP indexes, where the facets are placed, and which Bricks element is actually refreshed after a value is selected.
Start with the simplest page possible, one Query Loop and one set of filters. Choose the post type the catalog truly needs, such as products, posts, projects, or a custom post type. Then make sure the cards in Bricks are generated by that exact Query Loop, not by a static set of elements and not by a nested template that loads posts separately. This is critical for FacetWP: the plugin must see a supported listing, otherwise the selected facet may change the URL and UI state without producing the expected card update.
After that, check the index. Open FacetWP settings, confirm that the required facet fields are built from data that is actually filled in on the posts, and run re-index after changing field structure, taxonomies, or relationships. If in Bricks you are filtering products by brand, category, and price, but the FacetWP index still reflects an old configuration, visitors may see empty options, incomplete counts, or cards disappearing in unexpected ways. This is especially common after demo-data imports, bulk ACF field updates, or moving the site from a staging domain.
Also test the AJAX behavior directly. Select one facet and wait for the list to refresh, then reload the page with the resulting URL already in place. A good setup should handle both scenarios: fast interaction without a page reload and a direct link to an already filtered state. That matters for support, SEO review, internal linking, and users returning to the page later. If selected values reset after a page reload, the first things to check are filter placement, query parameters, and caching conflicts.
Final validation workflow before publishing the catalog
A practical test works best as a mini user scenario, not a quick scan of the admin panel. Open the catalog page in a private window so admin permissions, the toolbar, and cached states do not interfere. First assess the default list: the number of cards, sorting, image availability, visibility of empty values, and the accuracy of links on the cards. Then select one narrow facet, such as a category or content type, and confirm that the list actually narrows to the expected set of entries.
The next step is a combined filter. Select two or three values that should intersect, for example a category, a price range, and a tag. If the catalog becomes empty, check whether that is the real result or a side effect of a wrong data source. It helps to keep the WordPress post table nearby and manually find at least one entry that should match the conditions. If such an entry exists but does not appear on the page, the problem is usually in the index, the meta key, the taxonomy, or a custom query in Bricks.
Test the filter reset as well. For visitors, that is not a small detail: if they cannot get back to the full list, the catalog feels broken. The Reset link or Reset facet should clear selected values, restore the cards, and remove stale parameters from the URL. After that, test pagination or load more if either is in use. In a FacetWP and Bricks setup, the next batch of cards must continue to respect the selected facets instead of reverting to the full unfiltered list.
Finally, run the strictest test: open the page at mobile width, select filters, collapse and expand the facet block, then open a card and go back. If the user loses the selected state, it is worth revisiting filter placement, the reset-button UX, and URL parameter persistence. On a small blog, that might be tolerable. But for a catalog of services, real estate, courses, or products, this kind of state loss quickly undermines trust in the page.
How not to break filtering while refining the Bricks design
After a successful setup, a second wave of changes often begins: the designer adjusts the cards, adds wrappers, moves facets into a sidebar, builds an accordion for mobile, or connects additional Bricks elements. This is exactly the stage where working filtering can become unstable. To avoid that, agree on one simple rule: first change the visual shell, then separately verify that the same Query Loop still exists and that the element FacetWP needs to refresh has not been lost.
If you need to move filters into the sidebar, do not duplicate the same facet several times without understanding the behavior. Two identical controls on the page can confuse users and make troubleshooting harder, especially if one block is hidden with CSS on desktop and the other on mobile. It is usually better to keep one logical filter set and adapt its placement through the Bricks layout. If separate desktop and mobile panels are truly necessary, test them as a distinct risk area: selecting values, resetting, going back, opening a direct URL, and reloading the page.
The same principle applies to cards. You can change the grid, spacing, typography, badges, buttons, and thumbnails, but you cannot accidentally turn a dynamic card into a static block. If someone edits the template and removes dynamic data, changes the post source, or moves part of the card into another query, FacetWP will keep filtering the original listing while the user sees a mix of old and new behavior on screen. That is why after every major card edit, you should run a short regression test: one facet, a combination of facets, reset, and pagination or load more.
Caching should also be accounted for before launch. A filterable catalog should not be treated like a fully static page. If the site uses a cache plugin, server-side cache, or JavaScript optimization, verify that FacetWP AJAX requests are not blocked, URL parameters are not stripped, and Bricks and FacetWP scripts are not deferred in an order that breaks initialization. There is no need to disable all optimization across the site in advance, but the catalog page should be on the manual QA list after every cache-related change.
A diagnostic map for support and site editors
Once the catalog is live, it helps to leave editors a short troubleshooting map. That reduces the risk of random design-level fixes when the real issue is in the data or the index. If a filter returns nothing, first check whether any posts actually have those values. If matching posts exist, run re-index. If there is still no result after re-index, verify that the meta key or taxonomy used by the facet matches the actual field on the post. Only after that does it make sense to inspect the Bricks template and script conflicts.
If filtering works for the administrator but not for a regular visitor, check cache, minification, and AJAX availability. If the cards update but the counts look wrong, go back to the facet data source and confirm which posts are supposed to be part of the index. If the entire grid disappears after a value is selected, check whether an additional query condition was added in Bricks that conflicts with the FacetWP selection. This troubleshooting order saves time: the team does not cycle through every setting at random, but moves from data to index, then to Query Loop, and only after that to optimization.
For sites with active content updates, add one simple operating rule: after a bulk import, taxonomy change, ACF field update, custom post type edit, or database migration, re-index FacetWP and open the key catalog page in visitor mode. That is especially important if the catalog is commercial in nature: inquiries, card clicks, sorting, and product discovery all depend on how reliably your WordPress data, FacetWP settings, and Bricks template stay connected.


