{"id":342002,"date":"2026-07-20T23:11:18","date_gmt":"2026-07-20T23:11:18","guid":{"rendered":"https:\/\/en-au.wordpress.org\/plugins\/demfilz-fields-and-filters\/"},"modified":"2026-07-20T23:10:46","modified_gmt":"2026-07-20T23:10:46","slug":"demfilz-fields-and-filters","status":"publish","type":"plugin","link":"https:\/\/ibo.wordpress.org\/plugins\/demfilz-fields-and-filters\/","author":20035799,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.0.3","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Demfilz Fields and Filters","header_author":"Demfilz","header_description":"Add custom fields to pages, posts and products, then let visitors filter content by those fields, tags, taxonomies, WooCommerce product attributes or global attributes.","assets_banners_color":"29385a","last_updated":"2026-07-20 23:10:46","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/demfilz.com\/fields-and-filters","header_author_uri":"https:\/\/demfilz.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":81,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"demfilz","date":"2026-07-20 23:10:46"}},"upgrade_notice":{"1.0.1":"<p>Output escaping hardening.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3616277,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3616277,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3616277,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3616277,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3616277,"resolution":"1","location":"assets","locale":"","width":1200,"height":760},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3616277,"resolution":"2","location":"assets","locale":"","width":1200,"height":760},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3616277,"resolution":"3","location":"assets","locale":"","width":1200,"height":760},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3616277,"resolution":"4","location":"assets","locale":"","width":1200,"height":760},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3616277,"resolution":"5","location":"assets","locale":"","width":1200,"height":760}},"screenshots":{"1":"Defining custom fields in the admin.","2":"The Custom fields meta box on a product.","3":"The front-end filter form and results grid.","4":"The shortcode builder.","5":"Settings."}},"plugin_section":[],"plugin_tags":[2010,28913,2236,6033,286],"plugin_category":[45],"plugin_contributors":[268125],"plugin_business_model":[],"class_list":["post-342002","plugin","type-plugin","status-publish","hentry","plugin_tags-custom-fields","plugin_tags-faceted-search","plugin_tags-filter","plugin_tags-product-filter","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-demfilz","plugin_committers-demfilz"],"banners":{"banner":"https:\/\/ps.w.org\/demfilz-fields-and-filters\/assets\/banner-772x250.png?rev=3616277","banner_2x":"https:\/\/ps.w.org\/demfilz-fields-and-filters\/assets\/banner-1544x500.png?rev=3616277","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/demfilz-fields-and-filters\/assets\/icon-128x128.png?rev=3616277","icon_2x":"https:\/\/ps.w.org\/demfilz-fields-and-filters\/assets\/icon-256x256.png?rev=3616277","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/demfilz-fields-and-filters\/assets\/screenshot-1.png?rev=3616277","caption":"Defining custom fields in the admin."},{"src":"https:\/\/ps.w.org\/demfilz-fields-and-filters\/assets\/screenshot-2.png?rev=3616277","caption":"The Custom fields meta box on a product."},{"src":"https:\/\/ps.w.org\/demfilz-fields-and-filters\/assets\/screenshot-3.png?rev=3616277","caption":"The front-end filter form and results grid."},{"src":"https:\/\/ps.w.org\/demfilz-fields-and-filters\/assets\/screenshot-4.png?rev=3616277","caption":"The shortcode builder."},{"src":"https:\/\/ps.w.org\/demfilz-fields-and-filters\/assets\/screenshot-5.png?rev=3616277","caption":"Settings."}],"raw_content":"<!--section=description-->\n<p>Demfilz Fields and Filters does two jobs that belong together:<\/p>\n\n<ol>\n<li><strong>Custom fields<\/strong> - define your own fields (text, number, select, radio, checkbox, date, URL, text area) and attach them to pages, posts, products or any public post type. Editors fill them in from a clean meta box on the edit screen.<\/li>\n<li><strong>Front-end filters<\/strong> - drop the <code>[dfaf_filters]<\/code> shortcode on any page to show a filter form plus a results grid. Visitors can filter by your custom fields, by tags, categories or any taxonomy, by WooCommerce global attributes (pa_*) and even by custom per-product attributes.<\/li>\n<\/ol>\n\n<h4>Filtering features<\/h4>\n\n<ul>\n<li>Filter by any filterable custom field: choice dropdowns, multi-select checkbox lists, numeric min\/max ranges, date ranges, yes\/no toggles and keyword matching.<\/li>\n<li>Filter by any public taxonomy: tags, categories, product categories, product tags and WooCommerce global attributes.<\/li>\n<li>Filter by custom (per-product) WooCommerce attributes - the plugin indexes them into fast, queryable meta on every product save.<\/li>\n<li>Optional keyword search box and sort dropdown (newest, title, price for products).<\/li>\n<li>Paginated, responsive results grid (1-4 columns) with thumbnail, title, price and excerpt.<\/li>\n<li>Split mode: place the filter form on one page and point it at another page or your shop archive.<\/li>\n<li>Optional archive integration: apply active filters to blog, category, tag and shop archive pages.<\/li>\n<li>Shortcode builder in the admin so you never have to remember parameters.<\/li>\n<\/ul>\n\n<h4>Works with or without WooCommerce<\/h4>\n\n<p>WooCommerce is optional. Without it you can still define fields for posts and pages and filter them. With WooCommerce active, product support, price sorting and attribute filters light up automatically.<\/p>\n\n<h4>For developers<\/h4>\n\n<p>Field types live in a registry that the plugin itself uses for every built-in type. Register additional types through the <code>dfaf_field_types<\/code> filter, adjust queries with <code>dfaf_query_args<\/code>, decorate option labels with <code>dfaf_option_label<\/code> and customise result cards with <code>dfaf_result_card_html<\/code>.<\/p>\n\n<h4>Pro version<\/h4>\n\n<p>Everything above is free and fully functional. For sites that want more, <a href=\"https:\/\/demfilz.com\/fields-and-filters\">Fields and Filters Pro<\/a> is a separate add-on plugin ($19.95 per year) that adds:<\/p>\n\n<ul>\n<li>Instant AJAX filtering - results update as visitors change filters, no page reload, shareable URLs.<\/li>\n<li>Live result counts on every filter option.<\/li>\n<li>Colour swatch field type with visual swatch filter controls.<\/li>\n<li>Star rating field type with \"and up\" filtering.<\/li>\n<li>Pill-style filter controls.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin does not connect to any external service. No data leaves your site.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Go to <strong>Fields &amp; Filters -&gt; Fields<\/strong> and define your custom fields.<\/li>\n<li>Edit a page, post or product and fill in the new fields in the <strong>Custom fields<\/strong> meta box.<\/li>\n<li>Go to <strong>Fields &amp; Filters -&gt; Filters<\/strong>, build your shortcode and paste it into any page.<\/li>\n<li>(WooCommerce stores) open <strong>Fields &amp; Filters -&gt; Settings<\/strong> and click <strong>Rebuild attribute index<\/strong> once so existing custom product attributes become filterable.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20filter%20by%20woocommerce%20global%20attributes%3F\"><h3>How do I filter by WooCommerce global attributes?<\/h3><\/dt>\n<dd><p>Global attributes are taxonomies named pa_something. Add them to the shortcode, for example: <code>[dfaf_filters post_type=\"product\" taxonomies=\"pa_colour,pa_size\"]<\/code>.<\/p><\/dd>\n<dt id=\"how%20do%20i%20filter%20by%20custom%20%28per-product%29%20attributes%3F\"><h3>How do I filter by custom (per-product) attributes?<\/h3><\/dt>\n<dd><p>Use the attributes parameter, for example: <code>[dfaf_filters post_type=\"product\" attributes=\"material\"]<\/code>. The plugin indexes custom attribute values automatically when a product is saved; run <strong>Rebuild attribute index<\/strong> in Settings to index products that existed before the plugin was installed.<\/p><\/dd>\n<dt id=\"can%20visitors%20pick%20more%20than%20one%20value%3F\"><h3>Can visitors pick more than one value?<\/h3><\/dt>\n<dd><p>Yes. List the field keys or taxonomies in the multi parameter and they render as checkbox lists, for example: <code>[dfaf_filters post_type=\"product\" taxonomies=\"pa_colour\" multi=\"pa_colour\"]<\/code>.<\/p><\/dd>\n<dt id=\"can%20i%20put%20the%20filter%20form%20in%20a%20sidebar%20and%20the%20results%20on%20the%20shop%20page%3F\"><h3>Can I put the filter form in a sidebar and the results on the shop page?<\/h3><\/dt>\n<dd><p>Yes. Use <code>[dfaf_filters post_type=\"product\" form_only=\"1\" action=\"\/shop\/\"]<\/code> for the form, then enable <strong>Archive filtering<\/strong> in Settings so the shop archive applies the filters.<\/p><\/dd>\n<dt id=\"does%20it%20slow%20my%20site%20down%3F\"><h3>Does it slow my site down?<\/h3><\/dt>\n<dd><p>No. Values are stored as normal post meta and queried with standard meta and taxonomy queries. Custom product attributes are pre-indexed on save specifically so filtering never has to parse serialized data.<\/p><\/dd>\n<dt id=\"where%20is%20the%20data%20stored%3F\"><h3>Where is the data stored?<\/h3><\/dt>\n<dd><p>Field definitions are a single option; values are post meta prefixed with <em>dfaf<\/em>. On uninstall the plugin removes its options, and also the post meta if you opted in on the Settings page.<\/p><\/dd>\n<dt id=\"is%20there%20a%20pro%20version%3F\"><h3>Is there a Pro version?<\/h3><\/dt>\n<dd><p>Yes. Fields and Filters Pro is a separate add-on plugin ($19.95 per year) that adds instant AJAX filtering, live result counts on filter options, colour swatch and star rating field types, and pill-style controls. See https:\/\/demfilz.com\/fields-and-filters. The free plugin is complete on its own and never locks features.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Security hardening: all markup returned by field-type render callbacks and public filters is now sanitised with wp_kses before output (shortcode results, filter controls and the edit-screen meta box).<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: custom fields for pages, posts and products; front-end filtering by fields, tags, taxonomies, WooCommerce global attributes and custom product attributes; shortcode builder; archive integration; attribute index.<\/li>\n<\/ul>","raw_excerpt":"Add custom fields to pages, posts and products, then let visitors filter content by fields, tags, taxonomies and WooCommerce attributes.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ibo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/342002","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ibo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ibo.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ibo.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=342002"}],"author":[{"embeddable":true,"href":"https:\/\/ibo.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/demfilz"}],"wp:attachment":[{"href":"https:\/\/ibo.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=342002"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ibo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=342002"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ibo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=342002"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ibo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=342002"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ibo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=342002"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ibo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=342002"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}