{"id":366550,"date":"2026-09-15T05:14:18","date_gmt":"2026-09-15T05:14:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/codebold-smart-filters\/"},"modified":"2026-09-15T05:13:46","modified_gmt":"2026-09-15T05:13:46","slug":"codebold-smart-filters","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/codebold-smart-filters\/","author":23544796,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.8.6","stable_tag":"0.8.6","tested":"7.1","requires":"6.5","requires_php":"8.1","requires_plugins":null,"header_name":"CodeBold Smart Filters","header_author":"CodeBold IT Solutions","header_description":"Product filters for WooCommerce shop and category pages. Size, colour, price, stock and sale \u2014 working in any theme, with or without JavaScript.","assets_banners_color":"071613","last_updated":"2026-09-15 05:13:46","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/codeboldcommerce.com\/smart-filters\/","header_author_uri":"https:\/\/codeboldcommerce.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":33,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.8.6":{"tag":"0.8.6","author":"codeboldtech","date":"2026-09-15 05:13:46","revision":3696212}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3696211,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3696211,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3696211,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3696211,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3696211,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"codebold\/filters":{"name":"codebold\/filters","title":"Filters"}},"tagged_versions":["0.8.6"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3696211,"resolution":"1","location":"assets","locale":"","width":1400,"height":1100},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3696211,"resolution":"2","location":"assets","locale":"","width":780,"height":1688},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3696211,"resolution":"3","location":"assets","locale":"","width":390,"height":844}},"screenshots":{"1":"Filters beside the shop, with a live count against every option and the ones that would return nothing greyed rather than hidden","2":"Sort and Filter side by side on a phone, where the two questions a shopper has about a list belong together","3":"Choosing how to sort without leaving the shop, and without the page reloading under you"}},"plugin_section":[],"plugin_tags":[282,2755,6033,1242,286],"plugin_category":[45],"plugin_contributors":[278356],"plugin_business_model":[],"class_list":["post-366550","plugin","type-plugin","status-publish","hentry","plugin_tags-ecommerce","plugin_tags-filters","plugin_tags-product-filter","plugin_tags-shop","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-codeboldtech","plugin_committers-codeboldtech"],"banners":{"banner":"https:\/\/ps.w.org\/codebold-smart-filters\/assets\/banner-772x250.png?rev=3696211","banner_2x":"https:\/\/ps.w.org\/codebold-smart-filters\/assets\/banner-1544x500.png?rev=3696211","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/codebold-smart-filters\/assets\/icon.svg?rev=3696211","icon":"https:\/\/ps.w.org\/codebold-smart-filters\/assets\/icon.svg?rev=3696211","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/codebold-smart-filters\/assets\/screenshot-1.png?rev=3696211","caption":"Filters beside the shop, with a live count against every option and the ones that would return nothing greyed rather than hidden"},{"src":"https:\/\/ps.w.org\/codebold-smart-filters\/assets\/screenshot-2.png?rev=3696211","caption":"Sort and Filter side by side on a phone, where the two questions a shopper has about a list belong together"},{"src":"https:\/\/ps.w.org\/codebold-smart-filters\/assets\/screenshot-3.png?rev=3696211","caption":"Choosing how to sort without leaving the shop, and without the page reloading under you"}],"raw_content":"<!--section=description-->\n<p>Filters for WooCommerce shop and category pages.<\/p>\n\n<ul>\n<li>Filters on any product attribute you have created \u2014 size, colour, material<\/li>\n<li>Categories, brands and tags, without turning them into attributes as well<\/li>\n<li>Price range, in-stock only, and on-sale<\/li>\n<li>A live count against every option, so nobody clicks their way to an empty page<\/li>\n<li>Options that would return nothing are shown greyed rather than hidden, so the shop's\nrange stays legible<\/li>\n<li>The shopper's choices live in the address, so a filtered list can be bookmarked,\nshared, and reached with the back button<\/li>\n<li><p>Works before JavaScript loads. The script only replaces the results in place so the\nshopper keeps their scroll position<\/p><\/li>\n<li><p>A search box on any group long enough to need one, so ninety brands is still one you\ncan find<\/p><\/li>\n<li>One settings screen, with the panel drawn beside it as you change it \u2014 drag the groups\ninto the order you want, rename any of them, and see it before you save<\/li>\n<li>A block for block themes, a widget for sidebars, and an Elementor widget with its own\nStyle tab<\/li>\n<\/ul>\n\n<p>Placed above the products automatically, or with the widget or the\n    [codebold_filters] shortcode.<\/p>\n\n<p>The plugin, and the rest of the CodeBold Commerce suite, are at\nhttps:\/\/codeboldcommerce.com\/smart-filters\/ \u2014 that is where the documentation lives and\nwhere support is answered.<\/p>\n\n<p>A CodeBold IT Solutions product. https:\/\/codeboldtech.com<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin makes no request to any server, ever \u2014 not ours, not anyone else's. There is\nno licence check, no registration, no usage tracking and no telemetry. Nothing leaves your\nsite when a shopper filters your shop, and nothing leaves it when you open the settings\nscreen either. The settings screen is set in your system font.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate.<\/li>\n<li>That is all \u2014 filters appear on your shop and category pages.<\/li>\n<li>WooCommerce, then Smart Filters, to choose what shoppers narrow by, what order the\ngroups are in and where the panel goes. The panel is drawn beside the settings as you\nchange them.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20work%20with%20my%20theme%3F\"><h3>Does it work with my theme?<\/h3><\/dt>\n<dd><p>It narrows the theme's own product list rather than drawing its own, so the products\nkeep looking exactly as your theme draws them.<\/p><\/dd>\n<dt id=\"does%20it%20need%20javascript%3F\"><h3>Does it need JavaScript?<\/h3><\/dt>\n<dd><p>No. Every control is an ordinary link. The script is an enhancement that swaps the\nresults in place instead of reloading.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.8.6<\/h4>\n\n<ul>\n<li>The settings screen no longer fetches its typefaces from Google Fonts. It draws in your\nsystem font instead, so opening it makes no request to any server, ever \u2014 the same\npromise the plugin already made about the shop and the shopper<\/li>\n<\/ul>\n\n<h4>0.8.5<\/h4>\n\n<ul>\n<li>The first version offered publicly. Nothing here changes what the filters do or how\nthey look \u2014 it is the pass a plugin gets before strangers read it<\/li>\n<li>Reading the address now removes WordPress own slashes before matching a term. No shop\nwill see a difference, because the characters WordPress escapes do not survive into a\nterm slug in the first place; it is correct rather than lucky, which is the standard\nthe directory holds a plugin to<\/li>\n<li>The uninstall routine no longer writes to $blog_id while it runs. On a network it\nvisits every site in turn, and the loop was assigning to WordPress own global \u2014 the\nsame one switch_to_blog() and restore_current_blog() manage between those lines<\/li>\n<li>Term ids reach the counting queries as placeholders rather than written into the\nstatement already cast. The query is identical; the difference is that a reader can see\nit is prepared without first tracing where the ids came from<\/li>\n<li>Translations are left to WordPress, which has loaded them for plugins in the directory\nsince 4.6, and does it at the first string rather than on every page. The plugin was\nloading a second copy eagerly<\/li>\n<li>The settings screen now says who made it and where the documentation is<\/li>\n<li>The plugin header pointed at a domain that no longer resolves<\/li>\n<li>Every external request the plugin makes is now written down in the readme. There is one:\nthree typefaces on the settings screen, and a filter that turns it off<\/li>\n<li>Each hand-written query now carries, in the source beside it, why it is written that\nway \u2014 which values are placeholders, which are table aliases that cannot be, and where\nthe caching happens. Static analysis reads one function at a time and could not tell;\na person reading the code should not have to work it out either<\/li>\n<\/ul>\n\n<h4>0.8.3<\/h4>\n\n<ul>\n<li>A sweep for the rest of the same bug, rather than waiting to be shown each one. What is\nwritten on top of the accent colour is now a setting of its own: white is right on the\ndefault blue and unreadable on a bright green, so a chosen size chip, the price Go\nbutton and the count on the filter button all follow one property instead of five\nhardcoded whites<\/li>\n<li>The dark panel style tells the browser it is dark, so the price range's arrows, the\nsearch box's clear button and any scrollbar inside it are drawn to match<\/li>\n<li>On the settings screen: placeholder text, text selection, the dismiss cross on our own\nnotice, a read-only licence field, and the focus ring WordPress draws in its own blue<\/li>\n<li>Autofill no longer turns a field white. Chrome paints a saved value with its own\nnear-white background and there is no property that overrides it \u2014 it has to be drawn\nover, which it now is<\/li>\n<\/ul>\n\n<h4>0.8.2<\/h4>\n\n<ul>\n<li>The dropdowns on the settings screen were unreadable: a select was given a dark\nbackground, and the browser kept drawing its options in the default dark ink on top of\nit. Everything the browser paints for itself \u2014 select menus, number field arrows,\nscrollbars \u2014 is now told the surface is dark<\/li>\n<\/ul>\n\n<h4>0.8.1<\/h4>\n\n<ul>\n<li>An extension point after the settings form closes, so an add-on can carry a form of\nits own \u2014 a licence key field, for one. A form inside a form is not a thing HTML has<\/li>\n<\/ul>\n\n<h4>0.8.0<\/h4>\n\n<ul>\n<li>Filters of your own. An add-on \u2014 or a shop with a developer \u2014 can register a filter on\nanything, and the panel draws it, counts it, clears it and narrows the shop with it\nexactly as it does its own. See the FilterType class<\/li>\n<li>Counts take registered filters into account, in both directions: they are counted like\nevery other group, and every other group is counted against them<\/li>\n<li>Larger type and stronger contrast on the settings screen. Nothing smaller than 12.5px,\nbody text at 15.5px, and labels off the faintest ink \u2014 it is read by shopkeepers, some\nof them for an hour at a time, and it was too small<\/li>\n<li>Other plugins' admin notices are left alone. WordPress moves every notice on the page\ninside this screen's wrapper, and the dark styling was repainting them in our colours \u2014\na warning from another plugin arrived wearing our green<\/li>\n<\/ul>\n\n<h4>0.7.0<\/h4>\n\n<ul>\n<li>The settings screen is now a dark console in CodeBold Commerce's own colours and\ntypefaces, sitting inside the WordPress admin it belongs to<\/li>\n<li>A Panel style setting for the shop front: \"Match my theme\", which is the default and\nwhat it has always done, or \"CodeBold dark\". Colours only \u2014 the panel keeps your\nshop's typeface either way, because a plugin's fonts are not a cost a shopper should\npay for on a product page<\/li>\n<\/ul>\n\n<h4>0.6.1<\/h4>\n\n<ul>\n<li>A Pro tab on the settings screen, listing what a paid version would add. One tab,\nreached by choosing it: no dashboard banner, no dismissible notice on somebody else's\nscreen, and nothing greyed out in the middle of a setting that works<\/li>\n<\/ul>\n\n<h4>0.6.0<\/h4>\n\n<ul>\n<li>Filter by category, brand and tag. Every shop already has these and the panel could\noffer none of them, so a shop selling four brands had to make Brand an attribute as\nwell and keep the two in step by hand<\/li>\n<li>A parent category is counted across everything filed beneath it. Clicking one returns\nthe whole branch, so counting only what is filed directly against it promised one\nnumber and delivered another \u2014 usually zero, on a shop that files at the leaves<\/li>\n<li>The counts are worked out for the whole panel in one query instead of one per group,\neach of which used to pull every matching product id through PHP. Four queries became\none; eight became three<\/li>\n<li>Counts now take In stock and On sale into account. They did not, so with \"In stock\nonly\" ticked the number beside an option said eleven where the shopper was about to be\nshown four<\/li>\n<li>A new settings screen: three tabs, groups you can drag into order, a name of your own\nfor any of them, a plain-language account of where the filters will appear, and the\npanel drawn beside the settings as you change them<\/li>\n<li>A search box on any group with more than a dozen options<\/li>\n<li>A Product Filters block for block themes<\/li>\n<li>The Elementor widget now offers categories and brands as well as attributes, a sort\ntoggle, its own \"show more\" threshold, and typography and colour in the Style tab<\/li>\n<li>Sort can be turned off where a theme already has its own<\/li>\n<\/ul>\n\n<h4>0.5.4<\/h4>\n\n<ul>\n<li>Group headings are styled by their class rather than by the element carrying it. A\ngroup that cannot collapse renders a heading instead of a button, and only the button\nwas styled \u2014 so on any theme that sizes its headings, that one group appeared several\ntimes larger than its neighbours<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Let shoppers narrow your shop by size, colour, price and availability, in any theme, with or without JavaScript.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/366550","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=366550"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/codeboldtech"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=366550"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=366550"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=366550"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=366550"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=366550"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=366550"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}