This plugin is a powerful facet display plugin for WordPress that enhances the functionality of your website by allowing you to easily add interactive faceted search blocks to your content. With this plugin for WordPress, you can provide your users with an effective way to filter and search through your content, improving their overall experience.

Plugin Version: 0.3.0
 
WordPress plugin FacetWP Blocks

Plugin Features

One of the key features of this plugin is its ability to integrate seamlessly with the Gutenberg block editor. This means that you can easily create and customize faceted search blocks using the familiar block editor interface. Whether you want to add a search block to a blog post, a product page, or any other type of content, this plugin makes it simple to do so.

By utilizing this plugin, you can display various facets that allow users to narrow down their search results based on specific criteria. These facets can include things like categories, tags, custom taxonomies, custom fields, and more. You have full control over which facets are displayed and how they are presented to users.

This WordPress plugin also offers a range of customization options, allowing you to tailor the appearance and behavior of the faceted search blocks to match your websites design and branding. You can choose from a variety of pre-designed templates, or create your own using the provided styling options. Additionally, you can configure the plugin to support AJAX-powered live search, enabling users to see search results as they type.

Implementing this plugin on your WordPress site is straightforward. Once installed and activated, you can start creating faceted search blocks by simply adding the corresponding block to your desired content area. From there, you can configure the facets, define their options, and set the desired behavior of the search block. The intuitive interface of this plugin makes it accessible to both beginners and experienced users alike.

Overall, this WordPress plugin for faceted search adds a valuable functionality to your website, allowing users to easily find the content they are looking for. With its seamless integration with the Gutenberg block editor, extensive customization options, and user-friendly interface, this plugin is a valuable addition to any WordPress site.

Specifications:

Release date: 15-11-2023
Last updated: 27-02-2026
Type: Paid
License: GPL 
Subject: Authoring & Content for FacetWP
Compatibility: W5.x W6.x
Includes: Plugin
Language packs: English
Developer: FacetWP

Rating:
4.4320987654321 1 1 1 1 1 (162 Votes)

Download by subscription!

You need to log in on the site and purchase a club subscription!

Share with your friends!

 

FacetWP Blocks Guide: Filters for Query Loop, WooCommerce, and WordPress Block Templates

FacetWP Blocks is useful when a site is already built with the WordPress Block Editor, but the standard output for posts, products, or other content is not enough. This guide focuses on the practical implementation, not a sales pitch: how to prepare FacetWP, which blocks are supported, how to enable filtering for a listing, where to place facets, how to verify the result, and what to do if a filter does not affect the results.

FacetWP Blocks in the WordPress editor with facets and filtered results
FacetWP Blocks connects a block-based listing, facets, and live results on the page without a reload.

The core idea behind the plugin is simple: FacetWP remains the facet filtering engine, while the Blocks add-on adds a convenient layer for the Block Editor. Instead of dropping in shortcodes blindly or writing PHP in a template, an editor can select a listing block, enable Enable FacetWP, and place FacetWP Facet or Listing blocks nearby.

That does not mean FacetWP Blocks can turn any block into a filterable catalog. It has a specific list of supported blocks, pagination limitations, archive template rules, and separate nuances for WooCommerce Product Collection, GenerateBlocks, Stackable, Spectra, Kadence, and Otter Blocks. The most common mistake is enabling FacetWP on the wrong listing, or leaving the block's native pagination in place instead of using a Pager facet.

This guide is structured as a practical implementation map. We will start by defining when the plugin makes sense, then prepare the data and facets, build the page in the Block Editor, verify an archive template, walk through a WooCommerce setup, cover empty-state settings, safe hooks, and troubleshooting.

What FacetWP Blocks solves and where it is genuinely useful

FacetWP itself filters posts, pages, products, and custom post types by taxonomies, fields, and other indexed data. A user selects values in facets, and the listing updates via AJAX. FacetWP Blocks adds support for the WordPress block interface on top of that logic: the editor sees the listing as a Query Loop, Posts List, Latest Posts, Product Collection, or a compatible third-party block, and connects filters to it without needing a separate PHP template.

This is especially useful for sites where content is already assembled in the Block Editor or Site Editor. For example, a course catalog might be built with a Query Loop on a standard page, the blog might use an archive template in a block theme, the store might output products through WooCommerce Product Collection, and the editor needs to add filters by category, price, tags, difficulty level, or other attributes. In that situation, FacetWP Blocks bridges the gap between visual editing and serious facet logic.

The plugin is not limited to WooCommerce. It works well for real estate catalogs, article libraries, recipe databases, document catalogs, event listings, portfolios, expert directories, internal knowledge bases, or any other output where entries can be represented as a single WordPress query. The key requirement is that the page has one main listing that FacetWP can treat as the filterable listing.

When the block-based approach is the right choice

The block-based approach makes sense when editors already work in Gutenberg, do not want to maintain separate PHP templates, and need visual control over the result card. Query Loop lets you control the card structure: title, image, excerpt, date, button, custom blocks, and containers. FacetWP Blocks adds filtering on top of that, rather than replacing the layout itself.

Another strong use case is block themes. In the Site Editor, you can edit archive, search, and category templates. If the template is built with a supported Query Loop type block, FacetWP Blocks can connect facets directly inside the template structure. But this is also where mistakes happen most often: the archive query must inherit from the template, or be intentionally ignored through a verified hook, otherwise FacetWP may target the wrong query.

When FacetWP Blocks may be unnecessary

If the site already uses a classic PHP template, Elementor, Bricks, or Beaver Builder, it may be more convenient to connect FacetWP through their native integrations, shortcodes, or PHP. If you only need one simple category filter without AJAX, regular Query Loop settings may be enough. FacetWP Blocks is also not the best choice when a page needs multiple independent filterable listings: the official documentation explicitly limits you to one filterable listing per page.

You should not install FacetWP Blocks just for a "nice-looking block." It is not meant for arbitrary visual grids that are not supported post listing blocks. If a third-party plugin builds a block as a Query Loop variation and shows the Enable FacetWP option, that still does not guarantee official support. For a stable production setup, stick to the supported block list and verify the result on a public page.

Supported blocks and limitations to understand before setup

Before installing anything, do not just ask, "Does FacetWP Blocks work with Gutenberg?" The better question is which block is actually rendering posts or products. The add-on is designed for specific blocks: WordPress Query Loop, Posts List, Latest Posts, WooCommerce Product Collection, the older WooCommerce Products Beta block on existing pages, GenerateBlocks Query Loop and Query, Kadence Posts, Stackable Posts, Spectra Post Grid, Spectra Pro Advanced Loop Builder, and Otter Blocks Posts. That is not a promise to filter every block that happens to look like a listing.

The documentation includes an important warning: some plugins create variations based on supported blocks. Those variations may show Enable FacetWP in the interface, but FacetWP officially supports only the exact block types on its own list. If a variation changes the query, nesting, pagination, or its own AJAX behavior, the result may be unpredictable.

One filterable listing per page

This rule is worth remembering before you build the layout. A page should contain only one block enabled for FacetWP, or one standard filterable Listing block. Additional listings can be added as static blocks if you are using the FacetWP Listing block, but they should not respond to facets. Otherwise, everything may appear fine in the editor while the live page starts updating the wrong listing, clearing selections, or creating conflicts between queries.

The practical check is simple: open List View in the editor and find every Query Loop, Posts, Product Collection, or third-party listing block. Make sure Enable FacetWP is turned on for only one of them. If the layout comes from a built-in WordPress pattern, check whether it inserts two Query Loops inside the same composition. Those patterns are better avoided with FacetWP.

Why native pagination often gets in the way

FacetWP controls result updates, so it also needs to control pagination. That is why separate Pagination blocks, WooCommerce Pagination, Product Collection's built-in filters, Spectra Pro's internal search/sort/filter blocks, and some third-party Load More buttons should be removed and replaced with FacetWP facets. Use a Pager facet for pagination, a Sort facet for ordering, a Reset facet for clearing filters, and a User Selections facet for showing active choices.

There are exceptions, but you should enable them deliberately. For example, Spectra Post Grid has its own pagination setting that FacetWP can sometimes intercept, but even there you should not mix it with Load More Pager without testing. If you are unsure, choose the more predictable setup: one supported listing block, a Facet block for facets, a Pager facet for pagination, and no third-party filters beside it.

What WordPress context support actually means

FacetWP Blocks assumes the Block Editor is working as intended. If the site uses custom code or a plugin that disables Gutenberg and forces Classic Editor as the main editing mode, the add-on loses its purpose. The documentation also advises against installing the Gutenberg plugin unless you specifically need it: that plugin is an experimental environment for testing upcoming editor features, and it can break compatibility with block integrations.

For a production site, it is safer to use the standard Block Editor from WordPress core and update compatible block plugins only after testing them on a staging site. That matters even more for WooCommerce and block themes, where Product Collection, Query Loop, and interactive block structures change faster than classic templates.

Preparation: data, facets, index, and a test page

FacetWP Blocks does not create filter data. It displays facets that are already configured in FacetWP and connects them to a block-based listing. That means the setup should not begin with Enable FacetWP, but with a clear understanding of what data your posts or products actually have: categories, tags, custom taxonomies, ACF fields, WooCommerce attributes, price, date, rating, location, or another data source.

If the data source is chosen poorly, the filter may look correct but still fail the user. For example, a course catalog is usually better filtered by level, topic, format, and duration, not by internal admin labels. For a store, product attributes, price, stock status, and category matter most. For an article library, useful filters might be topic, format, author, difficulty, and publication year, if the year genuinely helps people navigate.

Create facets before building the page

In the FacetWP admin, each facet has a Label and a technical Name. The Label is what the user sees, while the Name is used in shortcodes, URL parameters, and internal logic. The technical name should be short, unique, use Latin characters only, and avoid special characters. If you name a facet with a reserved word or something too close to a core WordPress parameter, you may get odd behavior. The documentation specifically warns about problematic names like name, method, and length.

After creating a facet, build the index. The index is a service table in FacetWP that stores the relationship between posts, field values, and filter options. That is why FacetWP can update options quickly and show only relevant values. Whenever you change the data source, add new fields, import products in bulk, or modify the facet structure, the index should be rebuilt.

Verify the listing without facets

Before connecting FacetWP Blocks, create or open the page that will hold the future listing. If it is a Query Loop, choose the correct post type, order, number of items per page, and card composition. If it is WooCommerce Product Collection, make sure it is showing the right products. If it is an archive template, confirm that it correctly displays the current category, tag, search results, or shop view without any FacetWP involvement.

Quick check before enabling FacetWP: the listing should already show the correct content on its own. If Query Loop is already returning the wrong post type, the wrong categories, or an empty result, FacetWP Blocks will not fix the query - it will only add filtering on top of it.

It is best to build the test page on a draft or staging site. Add 12 to 20 entries with different facet values so you can actually see the result set change. If the catalog only contains three items and they all share the same category, the filter may look broken when in reality it simply has nothing to narrow down.

Installation and the first check in the Block Editor

FacetWP Blocks is installed as an add-on for the main FacetWP plugin. That means FacetWP itself must already be active, facets must be configured, and the index must be built. Then the add-on is installed and activated as a separate plugin. In practice, that is just the normal ZIP upload flow through Plugins - Add New - Upload Plugin, but this guide will not cover purchasing, license keys, or account setup, because the goal here is configuring an already available product.

After activation, open the page or template in the Block Editor. Add one of the supported listing blocks. Select the parent block itself, not an individual card inside it. In the settings panel on the right, you should see an additional toggle called Enable FacetWP. Turn it on, save the page, and verify that the block HTML now includes the FacetWP-enabled query marker. End users never need to see that, but it is useful for developers to understand that the setting is stored in block attributes.

Enable FacetWP setting in a supported WordPress block
The initial setup comes down to one filterable listing, the required facets, and replacing native pagination with a FacetWP Pager.

How to add facets next to the listing

In newer versions of the add-on, the built-in FacetWP Facet block is the easiest option. It lets you choose an existing facet from a dropdown and display it on the page. This is clearer than using a Shortcode block because the editor can see a placeholder and the block settings. If you need the older method for some reason, you can still insert a shortcode such as [facetwp facet="category"] into a separate Shortcode block.

For a typical catalog, three elements are enough: one or more facets above the listing or in a sidebar, one filterable listing block, and a Pager facet below the listing. If you need sorting and reset controls, add a Sort facet and a Reset facet. For a cleaner interface, you can also add a User Selections facet so visitors can see which filters are active and remove a specific choice quickly.

Verification after saving

FacetWP placeholders in the editor do not have to show real options. Testing should always happen on the public page. Open it in a separate tab, select a facet value, and check whether the listing changes without a full page reload. Then inspect the URL: FacetWP usually adds the selected facet parameters, so the filtered state can be shared with another person or opened in a new tab.

If facets do not appear on the public page, check three things first: whether the page has a FacetWP-enabled listing, whether the index has been built, and whether there is more than one filterable listing on the page. If the facets are visible but the listing does not change, verify that FacetWP is enabled on the parent listing block itself, not on a nested Post Template or card container.

How to roll back the initial setup

The rollback is simple: turn off Enable FacetWP for the listing block, remove the Facet blocks or Shortcode blocks with facets, restore the original pagination if you still need it without FacetWP, and save the page. The data and facets in FacetWP remain intact, but that page will no longer be controlled by them. This makes testing easy: you can keep a duplicate page and switch only one listing back and forth.

A working settings map: which facets to place next to a block-based listing

After installation, many people immediately ask, "Which filters should I add?" A better starting point is this: what path should a visitor follow from a broad listing to the exact result they need? FacetWP Blocks does not limit you to one facet type, but every field on the page should have a purpose. If a filter does not narrow the selection, help compare items, or answer a real user question, it only takes up space and makes the interface harder to use.

A practical selection model looks like this: first define the main entry criterion, then the refining criteria, then the service controls. The main criterion is usually tied to the user's goal: product category, course topic, document type, city, or service format. Refining criteria help narrow the results further: level, brand, price range, date, rating, difficulty, duration. Service controls do not filter meaning directly, but they make the interface manageable: search, sorting, reset, active filters, and pagination.

Facets for a post catalog or knowledge base

For a blog, knowledge base, course catalog, or document library, 3 to 5 facets are usually enough. The first one should generally be the main taxonomy: category, topic, section, or subject. The second layer can be format or level, if those values are actually populated for most entries. Search makes sense if the entries have clear titles and content people are likely to search for. A Sort facet is useful when the visitor needs to choose the order: newest first, oldest first, alphabetical, or another predefined option.

Do not add a facet for every ACF field just because the field exists. For example, if a course has an internal field like "program code," that does not help the visitor. If a document has a back-office editorial tag, that probably should not be exposed either. A filter should reflect the user's language, not the admin panel's internal vocabulary.

Facets for WooCommerce and product collections

For a store, the most common filters are category, product attributes, price range, stock status, brand, or rating. But with Product Collection, you need to remember that some WooCommerce filtering blocks are incompatible with FacetWP Blocks. So decide first which system controls filtering: FacetWP or WooCommerce blocks. If you choose FacetWP, all key controls should be FacetWP facets, including Pager and, when needed, Sort.

Sorting by price and variable products should be tested separately. If the store relies heavily on variations, the parent product price and variation prices may not behave the way a simple Sort facet suggests. In that case, do not promise users "sorting across all options" until it has been verified with real products. For a storefront with variable products, build a small test set: one simple product, one variable product with multiple prices, one out-of-stock product, and one product from another category. That makes it much easier to see which filters behave honestly.

Block order on the page

The most readable layout for a standard catalog is facets above or to the left, the listing next to them or below, the Pager after the listing, and Reset plus User Selections near the active filters. If you have many facets, do not hide everything in one long sidebar. Split them into logical groups: first "What you are looking for," then "Refine," then "Sort and reset." On mobile, make sure the listing does not get pushed too far down by a long stack of checkboxes.

FacetWP Blocks does not design a mobile filter panel by itself. If you need a slide-out filter drawer, look at the theme, FacetWP Mobile Flyout, or a careful block-based layout. The main thing is not to break the connection between the facets and the listing. Moving facets into a container, column, or group is perfectly fine as long as they remain on the same page and there is still one correct FacetWP-enabled listing nearby.

Checking the Input - Product logic - Output chain

For each facet, walk through a short chain. Input - the value exists on the posts or products, and the correct data source is selected. Product logic - FacetWP has indexed that value and connected it to the current listing. Output - on the public page, selecting the facet changes the listing, the URL records the state, and Pager shows the correct number of pages. If any part of that chain fails, the problem is not "Gutenberg in general," but a specific step in the process.

For example, the "Level" filter is empty. Input: the level field is not filled in for all courses, or it is stored under a different meta key. Product logic: the index was not rebuilt after import. Output: the Facet block is hidden with Hide when empty. This kind of diagnosis is much faster than randomly changing the Query Loop, clearing cache, disabling plugins, and rewriting CSS.

A good FacetWP Blocks setup is measured by the quality of the result, not the number of facets: the user makes a choice, sees the listing narrow in the expected way, understands the empty state, and can return to the full catalog through Reset or by clearing selected values.

Facet block and Listing block: what to configure after installation

Since the Blocks add-on introduced dedicated FacetWP blocks, working in the editor has become much easier to understand. The two key blocks serve different purposes. Facet outputs a single facet: checkboxes, search, sorting, pagination, reset, or another type already created in FacetWP. Listing outputs a finished Listing Builder template, if you are using FacetWP's internal listing builder instead of Query Loop or a third-party block.

Do not mix those roles. If the page is built around a WordPress Query Loop, you need the Query Loop with Enable FacetWP and Facet blocks around it. If you want to display a Listing Builder listing, add the FacetWP Listing block and select an existing listing. In both cases, the one-filterable-listing rule still applies.

The Heading setting in the Facet block

The Facet block includes a Heading setting. It adds a title above the facet and lets you control the HTML tag and styling through the editor. This is better than inserting a separate manual heading, because the heading becomes part of the facet block itself. If the facet is hidden because it is empty, the heading can disappear with it.

For a standard catalog, headings should stay short: "Category," "Price," "Format," "Level," "Author." There is no need to stuff long SEO phrases into the filter UI. The user is already inside the catalog and needs clear navigation. If the site is multilingual, it is better to plan translations for those labels through FacetWP and WordPress, rather than hardcoding the same text in multiple places.

The Hide when empty setting

The Hide when empty setting hides a facet when it has no available options. This is useful on pages where the same template is reused for different categories: one category may have a brand filter, while another has no brands at all, and an empty block only confuses the user. There is one condition, though: if the facet has ghost choices enabled, it will not become empty in the normal sense, because FacetWP will continue showing unavailable options.

If you enable Hide when empty, review the facet settings themselves and disable Show ghosts anywhere an empty filter should disappear. Also remember that this option is not available for every facet type. Search, Autocomplete, Date Range, Number Range, Map, Proximity, Sort, Reset, User Selections, and some other facet types do not use the same count-based logic. For more advanced visibility rules, use the Conditional Logic add-on.

Static Listing block

The FacetWP Listing block can be static. A static listing displays entries but does not respond to facets. This is useful when you want a "popular," "recommended," or "new content" block next to the main catalog without letting filters affect it. Otherwise, a visitor selects a filter and two listings start rebuilding at once or conflicting with each other.

In practice, the structure can look like this: one main Listing block without Static enabled, several Facet blocks around it, and one static Listing block below as supplemental content. If you use Query Loop instead of Listing block, then additional Query Loops on the same page should remain without Enable FacetWP, and you should verify separately that they do not interfere with detection of the main query.

Archive templates, Query Loop, and Site Editor

Block-based archives are one of the strongest but also riskiest use cases. On a normal page, Query Loop usually runs a custom query: you choose the post type, order, number of items, and filters. An archive works differently. A category, tag, shop, or search template needs to use WordPress's native archive query, otherwise the page stops understanding its own context.

FacetWP Blocks takes that difference into account. For Query Loop type blocks in archive templates, you need the setting that tells the block to inherit the template's native query. In current editor interfaces, that may appear as Query Type - Default, while in some blocks and older setups it may be called Inherit query from template. The meaning is the same: Query Loop should not create a new arbitrary query when it is supposed to represent the current archive.

Diagram of FacetWP Blocks working with an archive Query Loop and facets
For archives, the critical chain is "native template query - FacetWP-enabled block - facets - live result check."

When you need FacetWP to ignore the archive query

Sometimes the situation is the opposite: you are inside an archive template, but you are intentionally using a custom block query. For example, Spectra Pro Advanced Loop Builder may create its own WP_Query on an archive page and not offer the required inheritance setting. By default, FacetWP may prioritize the archive query instead of the custom block query. In that case, the official documentation recommends the facetwp_is_main_query hook to tell FacetWP not to treat the native archive query as the main one.

That is no longer a content editor setting - it is a careful developer adjustment. Only add it when you clearly understand which template and which query are supposed to be filtered. It is best placed in a child theme, through a trusted snippets plugin, or in the Custom Hooks add-on so it can be disabled quickly if needed.

add_filter( 'facetwp_is_main_query', function( $is_main_query, $query ) {
  if ( $query->is_archive() && $query->is_main_query() ) {
    $is_main_query = false;
  }

  return $is_main_query;
}, 10, 2 );

After applying that change, test the category archive, shop archive, search, and standard pages with facets. If the site uses a dedicated posts page from the Reading settings, the condition may need to change: for a blog page, is_home() is often required, and for search, is_search(). Do not copy this hook globally without checking the context, or you may break pages where FacetWP is supposed to work with the native archive query.

Adjusting the number of posts in a block query

Sometimes you need to change how many items a Query Loop returns, but you need to do it in a way that does not conflict with FacetWP and pagination. For a normal page with a WordPress Query Loop, the documentation recommends the query_loop_block_query_vars hook and specifically warns against using pre_get_posts for those non-archive Query Loops, because that can cause pagination issues. For archive templates, the logic is reversed: if the block inherits the native archive query, use pre_get_posts.

A reliable rule is this: standard page with a custom Query Loop - use the block hook; archive with the native query - use pre_get_posts; third-party block - use that block's documented hook if one exists. This is not universal magic, just choosing the right intervention point based on where the query is actually being created.

Practical example: a course catalog with Query Loop and facets

Let us take a concrete scenario. The site has a custom post type called course. Each course has the taxonomies "Topic" and "Level," plus a field called "Format." The goal is to build a "Course Catalog" page where visitors can filter content by topic and level, search by title, sort by date, and move between result pages.

Goal and preparation

The goal is one page with a course grid, a filter sidebar, and FacetWP pagination. Before using the Blocks add-on, the course posts should already exist with their taxonomies filled in, the required facets should already be created under Settings - FacetWP, the index should be built, and the draft page should be ready. For this example, you need these facets: checkboxes for topic, radio buttons or a dropdown for level, a Search facet for text, a Sort facet, and a Pager facet.

Start by confirming that Query Loop can display the courses on its own. Create a page, add Query Loop, switch Query type to Custom, choose the course post type, set the number of items per page, and build the card inside Post Template. A title, image, short description, and button are enough for the card. Save the page and open the public preview without any facets.

Build steps in the editor

  1. Select the parent Query Loop block and enable Enable FacetWP in the right sidebar.
  2. Remove the nested Pagination block if it was added by the Query Loop pattern.
  3. Add FacetWP Facet blocks next to the grid and choose the "Topic," "Level," "Search," and "Sort" facets.
  4. Add another FacetWP Facet block below Query Loop and assign the Pager facet.
  5. Enable Heading for facets with a long list of values, and review Hide when empty for optional facets.
  6. Save the page and clear the page cache if the site uses a caching plugin.

After saving, do not judge the setup by how the editor looks. Open the public page. Select a course topic, then a level, then run a search. The listing should update without a full reload, the number of results should shrink, and Pager should show pages for the already filtered set.

Example of FacetWP Blocks results on a course catalog page
A practical scenario: filters, Query Loop, and a testable results grid on the public page.

A detail people often miss

If Query Loop has Offset enabled, turn it off. Offset works poorly with facet-based pagination because the offset is applied after facet selections and breaks the page count logic. If you need to exclude the first few posts or create a separate featured block, it is better to move that into a static list without FacetWP and keep the main catalog free of offsets.

Another detail is the Search facet and the "nothing found" state. If a user searches for a rare term, Query Loop should show a clear message rather than a blank area. For Query Loop type blocks, you can add a No Results block and write a short hint such as Nothing found. Remove some filters or change your search query. This builds trust in the filter because the person can see the system worked, rather than assuming it failed.

Result verification

Test at least five states: the page with no selected facets, one topic selected, topic and level selected together, a search with results, and a search with no results. Then reload the page with active URL parameters and make sure FacetWP restores the selections. Finally, open the page in a private window so you can rule out the editor session and admin cache.

WooCommerce Product Collection: sorting, buttons, and blocks that cause problems

The WooCommerce scenario may look similar to a post catalog, but it has more internal limitations. The Product Collection block can automatically add its own WooCommerce filters, sorting, and pagination. FacetWP Blocks does not work with those as one unified system. The documentation recommends removing product filtering, sorting, searching, and pagination blocks that come with Product Collection, and replacing them with FacetWP facets instead.

For a store, this matters for two reasons. First, visitors should not see two different filtering systems side by side. Second, mixing the AJAX logic of WooCommerce blocks with FacetWP can create states where the listing updates but the buttons, sorting, or pagination still belong to another mechanism. One storefront should have one filtering control layer.

Sort facet and Default sort by

If you use a Sort facet together with Product Collection on a product archive, pay attention to the Default sort by setting. According to the FacetWP documentation, the Sort facet works correctly only with options that match the query's default ordering, such as "Newest to oldest" and "Manual (menu order + name)." WooCommerce sorts by price, sales, or rating use additional tables and their own logic, so they may conflict with the Sort facet.

If the store absolutely needs price sorting, it is better to choose between two approaches. The first is to use the WooCommerce Catalog Sorting block where it is supported and appropriate, especially on product archives. The second is to have a developer define the order carefully through pre_get_posts and align that with the Sort facet settings. Sites with variable products require extra caution: sorting by variation price through Sort facet is officially described as unsupported.

Add to Cart after an AJAX refresh

Product Collection has a separate issue related to the Add to Cart Button block. If WooCommerce has Enable AJAX add to cart buttons on archives turned on, the button inside Product Collection may stop working after FacetWP refreshes the listing, because the block uses the Interactivity API and cannot simply be re-initialized after an AJAX refresh. The official recommendation is to disable AJAX add-to-cart buttons on archives, or use another output method for the button that does not depend on the same logic.

For most stores, this should be tested before launch. Add a product to the cart with no facets selected, then choose a filter, wait for the listing to update, and click Add to Cart again. If the second step fails, do not try to patch it with random JavaScript. First check the WooCommerce setting, then decide whether you need a different button output or a different product card layout.

When FacetWP Blocks is more convenient than a store-specific filter

FacetWP Blocks is convenient when the site already uses FacetWP for other catalogs and you want one index, one facet logic, and one shared approach to URL parameters. If the store is built entirely around WooCommerce blocks and only needs simple product filters, the built-in WooCommerce blocks may be enough. But if you need a unified approach across products, posts, recipes, documents, and custom post types, FacetWP becomes the more flexible tool.

Empty results, block nesting, and user messages

Filtering only works well when the user understands every interface state. A list with results is straightforward. A list with no results needs deliberate handling. FacetWP Blocks works with the No Results block in Query Loop type blocks and with the settings of some third-party blocks, but the behavior depends on structure: No Results has to be placed in the correct position relative to Post Template.

In a standard Query Loop, the No Results block can be added as a direct child of the parent Query Loop before or after Post Template. If you place No Results inside an extra container, the documentation calls for a stricter structure: the container with No Results should come before Post Template. If it is placed lower in the wrong nesting structure, the block may fail, and the visitor will see either the default message or an empty section of the page.

How to write a useful "nothing found" message

The message should guide the next action, not blame the user. A good default is: "Nothing found. Remove one of the filters or change your search query." For a store, you might add: "Try clearing the size filter or choosing a different category." For a course catalog: "Remove the level filter or choose a broader topic." The closer the hint is to the actual catalog, the less likely the user is to interpret an empty result as a broken feature.

If you need to replace the standard Nothing found. string, there are several options: a translation plugin, the gettext filter, facetwp_i18n for a multilingual site, or dedicated FacetWP Blocks hooks for different block types. Add code only when the standard No Results block is not enough. On a normal page, configuring the No Results block directly in the editor is usually the simpler and safer approach.

A safe example of localizing the default string

If the project is not multilingual but you need to replace the default FacetWP string with a custom localized message, you can use the gettext filter. This is a safe, targeted change because it is limited to the fwp-front text domain and a specific string. Add the code through a child theme or a snippets plugin, not inside the core of the theme or plugin.

add_filter( 'gettext', function( $translated_text, $text, $domain ) {
  if ( 'fwp-front' === $domain && 'Nothing found.' === $translated_text ) {
    return 'No results found.';
  }

  return $translated_text;
}, 10, 3 );

After adding it, open a page with facets, select a combination you know will return no results, and verify the message text. To roll back the change, disable the snippet or remove the filter from the child theme. If the site is multilingual, it is better not to use one global translation for every language, and to configure the translation through the appropriate localization method instead.

Performance, cache, and index: how not to break filtering

FacetWP is fast because it relies on an index and AJAX updates, but that does not mean every page can be made endlessly complex. Performance is affected by the number of posts, the number of facets, data sources, card size, images, third-party scripts, page cache, and object cache. FacetWP Blocks adds another layer on top of that: a block-based layout where each result card may consist of many nested blocks.

The first performance rule is to filter already prepared data. If facet values are unstable, calculated on the fly, or dependent on heavy queries, indexing and result updates become harder. The second rule is that the result card should be visually useful, but not overloaded. If Post Template contains ten dynamic blocks, several galleries, and heavy widgets, AJAX refreshes will feel slower.

When to rebuild the index

The index should be rebuilt after creating or changing facets, switching data sources, running bulk imports, editing meta fields, updating taxonomies, and whenever a facet shows outdated or incomplete options. If a filter does not see newly added products or posts, do not start by changing the template. First confirm that the data is actually saved on the post, then rebuild the index, then open the public page.

For large catalogs, indexing can take time. You do not need to keep the indexer page open, but on weaker hosting the process may run more slowly. If indexing regularly fails to complete, check the documentation on common indexing issues, server limits, background processes, and security conflicts.

Page cache and AJAX requests

Caching plugins usually speed up the initial page load, but FacetWP filtering needs to update the listing through its own AJAX requests. If selecting a facet does not change the listing, shows an old state, or different users see someone else's filter combination, review the cache rules. There is no need to disable caching site-wide. In many cases, it is enough to exclude the problematic URLs, parameters, or AJAX endpoint according to the FacetWP and caching plugin documentation.

After changing cache settings, test in sequence: clear the cache, open the page in a private window, select a filter, reload the page with the active URL, then clear the filter. If the problem disappears only for the administrator but remains for a guest, you were likely testing the wrong cache layer or CDN behavior.

SEO and indexability of filtered URLs

FacetWP URLs can preserve selected facet values. That is useful for users, but not every filter combination should be exposed to search engines as a separate landing page. For most catalogs, it is better to index the core archives, categories, and intentionally designed pages, not thousands of parameter combinations. If the site uses an SEO plugin, review the canonical settings, parameter indexation rules, and sitemap behavior.

FacetWP Blocks does not promise automatic SEO growth. Its job is to improve navigation and user behavior. SEO results depend on the catalog structure, content quality, speed, internal linking, canonical settings, and which pages are actually meant to be indexed.

Common FacetWP Blocks issues and troubleshooting

FacetWP Blocks problems are usually not caused by one button alone, but by the entire chain of "data - index - listing block - facets - query - cache." That is why troubleshooting works best when you start from the symptom. The cases below are the ones most typical for block-based FacetWP implementations.

Troubleshooting FacetWP Blocks errors in WordPress
Troubleshooting works best as a chain: symptom, affected block, cause, check, fix.

Facets do not appear on the public page

Symptom: the editor shows a Facet block or Shortcode block placeholder, but the facet does not appear on the live page. Possible causes include the absence of a FacetWP-enabled listing on the page, an unbuilt index, a missing facet, an unsupported output block, or multiple conflicting listings on the same page.

Start checking on the public page, not in the editor. Make sure there is one supported listing nearby with Enable FacetWP turned on. Then open FacetWP settings and verify that the facet exists, has a Latin-character technical name, and the index has been built. If the facet is hidden with Hide when empty, turn that setting off temporarily and see whether the block appears.

Facets are visible, but the listing does not change

Symptom: the visitor selects a filter, the URL changes, but the cards remain the same. Most often, FacetWP is enabled on the wrong block, multiple listings are active, or the Query Loop in an archive template is using the wrong query type. In WooCommerce, also check whether native product filter blocks and pagination blocks are still present.

Fix: select the parent listing block in List View, enable Enable FacetWP only there, and remove extra native pagination and filters. For an archive template, verify Query Type - Default or Inherit query from template if the listing should use the native archive query. If the block is intentionally running a custom query inside an archive, consider facetwp_is_main_query only after reviewing the documentation.

Pagination shows empty or repeating pages

Symptom: after filtering, pagination pages lead to empty results, duplicate posts, or clear the current selection. Possible causes include leaving a Pagination block inside Query Loop, using offset, mixing Pager facet with the block's internal pagination, or Spectra Post Grid's Page Limit restricting visible pages.

Fix: remove the Pagination block and use a Pager facet. Turn off offset in Query Loop. If you are working with Spectra Post Grid and its native pagination, do not mix it with Load More Pager. After making changes, clear the cache and test multiple pages with an active facet.

WooCommerce Add to Cart stops working after filtering

Symptom: the add-to-cart button works before a facet is selected, but stops adding the product after the AJAX refresh. In Product Collection, this may be related to the Add to Cart Button block and the WooCommerce setting Enable AJAX add to cart buttons on archives.

Fix: first test the behavior with AJAX add-to-cart buttons disabled on WooCommerce archives. If the store needs a different interaction model, choose a solution that does not depend on the problematic interactive block, or use the approach described in the official documentation with classic WooCommerce add-to-cart output. Do not add random JavaScript until the root cause is confirmed.

The block shows a preview error in the editor

Symptom: when selecting the Listing block, the editor shows a message that the block encountered an error and cannot be previewed. The documentation links this to a possible server error in the Display code of the selected Listing Builder template, especially when Dev Mode is enabled.

Check the server logs, Query Monitor, and the listing code itself. If the error appeared after a recent template change, roll that change back or temporarily switch to a different listing. Do not publish the page until both the editor preview and the public page pass a basic test.

Facets disappear when block patterns are used

Symptom: facets or listings inserted into a template pattern do not render on the live site, or disappear in the editor. The cause may be related to how WordPress handles shortcodes and PHP inside pattern files in the editor. The official documentation suggests outputting shortcode markup for the editor and a normally processed shortcode for the public side, but that is already a theme developer task.

If you are not developing the theme yourself, avoid inserting facets through PHP inside pattern files. Build the page or template in the Block Editor, save it, and test it. If you need a template file, first repeat the setup on a fresh test page, then transfer the block code carefully.

Who FacetWP Blocks is a good fit for, and who should choose another path

FacetWP Blocks is a strong fit for sites that need controlled facet filtering on top of the WordPress block interface. It is aimed at editors and developers who want to keep the visual card-building workflow of Query Loop, while still getting FacetWP's index, AJAX filtering, multiple facet types, sorting, pagination, and URL state handling.

The product is especially effective on mixed-content sites: blog, store, knowledge base, directories, and custom post types all live side by side, and filters need to behave consistently across them. It also works well for teams where the editor controls page structure, while the developer handles the occasional hooks, archive templates, and WooCommerce-specific edge cases.

If you need a grid builder with its own card builder, WP Grid Builder is worth a look. If the site is built entirely around Elementor, Bricks, Divi, or JetEngine and you need tight integration with that ecosystem, JetSmartFilters may be the more practical choice. If the goal is simple filtering for standard archives without complex facet logic, Filter Everything or Search & Filter may be easier to implement. The right choice depends not on the plugin name, but on where the query is created, who will maintain the page, and how complex the filters need to be.

Before rolling this out on a live site, run a short pilot: one test page, one supported listing, 3 to 4 facets, a Pager facet, an empty-result check, and a cache test. If that stack works reliably, you can move the setup into templates and more important sections. If the pilot shows the project constantly needs custom queries and exceptions, plan for developer time from the start.

FacetWP Blocks questions to answer before implementation

Can FacetWP Blocks be used without the main FacetWP plugin?

No. The Blocks add-on is an extension for FacetWP. It does not replace facet setup, indexing, or the core filtering logic. First install and configure FacetWP, then connect the add-on for supported WordPress blocks.

Why does the editor show a placeholder instead of real filter options?

That is normal behavior for the Facet block. Facets do not have to render as a full public interface inside the editor. You should test them on the public page, where the listing exists and the index has been built.

Can I place two independent filterable Query Loops on the same page?

No, that scenario is not officially supported. A page should have one FacetWP-enabled listing. If you need additional lists, keep them static or move them to separate pages. With the FacetWP Listing block, you can enable Static so the secondary listing does not respond to facets.

What is better for pagination - a Pagination block or a Pager facet?

In most cases, FacetWP Blocks should use a Pager facet. Standard Pagination blocks, and the pagination automatically added by some supported blocks, are often incompatible with FacetWP and should be removed. Check exceptions for the specific block you are using, and do not mix two pagination systems in the same result set.

Does FacetWP Blocks work with WooCommerce Product Collection?

Yes. Product Collection is one of the supported blocks. But its native filters, sorting, and pagination are incompatible with FacetWP and should be replaced with facets. You should also test the Sort facet, variable products, and Add to Cart after AJAX updates separately.

Do I need to disable cache for a page with facets?

Not necessarily. But if filters show stale results, fail to update the listing for guests, or conflict with a CDN, configure the appropriate exclusions based on the FacetWP and caching plugin documentation. After every change, clear the cache and test the page in a private window.

Should I install the Gutenberg plugin just to get newer blocks?

For a production site, it is better not to do that unless there is a real need. FacetWP recommends using the standard Block Editor from WordPress core, and treating the Gutenberg plugin as an experimental environment for developers. New experimental blocks can break compatibility.

Is FacetWP Blocks suitable for a beginner without a developer?

For a simple page with Query Loop and a few facets, yes, as long as you already understand what facets, the index, and the Block Editor are. For archive templates, WooCommerce Product Collection, custom hooks, and more advanced troubleshooting, it is better to involve a developer. That is not because the product is weak, but because filtering depends on the WordPress query and the block structure.

When FacetWP Blocks is the right choice

FacetWP Blocks is worth using if you want to keep the site in the WordPress Block Editor while adding serious filtering on top of Query Loop, Product Collection, or compatible blocks. It is especially useful when the site already has FacetWP, configured facets, a built index, and a clean data structure. In that setup, the add-on becomes a practical bridge between content editing and facet logic.

Before publishing, verify five things: one filterable listing, the correct supported block, a built index, a Pager facet instead of incompatible pagination, and the live result after AJAX refresh. For WooCommerce, also test the Sort facet, variable products, and Add to Cart. For archives, confirm either native query inheritance or a deliberate archive-query exclusion through a hook.

If the test page passes those checks, you can download FacetWP Blocks for WordPress and roll it out to the production section through a staging site. If the project requires multiple independent filterable listings on one page, nonstandard interactive blocks, or deep coupling to a specific builder, it is better to compare alternatives in advance and choose a tool that fits the site's architecture.

The main practical takeaway is this: FacetWP Blocks does not show its value at the moment of installation, but in a careful combination of data, index, one correct listing, and a clear facet interface. When that combination is built without extra conflicting blocks, the user gets a fast catalog, the editor keeps control over the layout, and the developer gets a predictable integration point for further customization.

By OceanTheme.org Editorial Team

 

You are not logged in to post comments.