{"id":355133,"date":"2026-09-22T10:26:44","date_gmt":"2026-09-22T10:26:44","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/webcasata-content-filter\/"},"modified":"2026-09-24T09:36:05","modified_gmt":"2026-09-24T09:36:05","slug":"webcasata-content-filter","status":"publish","type":"plugin","link":"https:\/\/arg.wordpress.org\/plugins\/webcasata-content-filter\/","author":23488074,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4.0","stable_tag":"trunk","tested":"7.1.3","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Webcasata Content Filter","header_author":"Webcasata","header_description":"Create tabbed, AJAX-powered post filters with a shortcode or block. No page reload, SEO-friendly initial render.","assets_banners_color":"fcf3ee","last_updated":"2026-09-24 09:36:05","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.webcasata.com\/webcasata-content-filter\/","header_author_uri":"https:\/\/webcasata.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":175,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":[],"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3708340,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon-512x512.png":{"filename":"icon-512x512.png","revision":3707031,"resolution":"512x512","location":"assets","locale":"","width":512,"height":512}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3708340,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3708340,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"webcasata\/content-filter":{"name":"webcasata\/content-filter","title":"Webcasata Content Filter"}},"tagged_versions":[],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[221,5860,166,1116,2148],"plugin_category":[50],"plugin_contributors":[269072],"plugin_business_model":[],"class_list":["post-355133","plugin","type-plugin","status-publish","hentry","plugin_tags-ajax","plugin_tags-content-filter","plugin_tags-posts","plugin_tags-showcase","plugin_tags-tabs","plugin_category-media","plugin_contributors-webcasata","plugin_committers-webcasata"],"banners":{"banner":"https:\/\/ps.w.org\/webcasata-content-filter\/assets\/banner-772x250.png?rev=3708340","banner_2x":"https:\/\/ps.w.org\/webcasata-content-filter\/assets\/banner-1544x500.png?rev=3708340","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/webcasata-content-filter\/assets\/icon-256x256.png?rev=3708340","icon_2x":"https:\/\/ps.w.org\/webcasata-content-filter\/assets\/icon-256x256.png?rev=3708340","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Webcasata Content Filter lets you build a tabbed post filter (by category or any taxonomy) and drop it\nanywhere with a shortcode. Visitors switch tabs via AJAX -- no page reload -- while the first tab is\nrendered server-side so search engines see real content.<\/p>\n\n<h4>Free features (this version)<\/h4>\n\n<ul>\n<li>Unlimited filters, each with its own shortcode or Gutenberg block<\/li>\n<li>Filter by any post type + taxonomy, with tabs generated from that taxonomy's terms<\/li>\n<li>AJAX tab switching, no page reload, with skeleton loading placeholders<\/li>\n<li>URL-shareable tabs (bookmark or share a link straight to a specific tab) and \"remember my last tab\" across visits<\/li>\n<li>Load More button or Infinite Scroll, your choice per filter<\/li>\n<li>Accessible, keyboard-navigable tabs with smooth fade-in animations<\/li>\n<li>5 card templates: Classic, Cards, Magazine, Minimal, News<\/li>\n<li>Full styling controls: tab colors, card radius\/shadow\/gap\/columns, typography<\/li>\n<li>Card Elements toggles: show or hide the Title, Date, Username\/Author, Excerpt, and Comment Count per filter<\/li>\n<li>Custom button text per filter (e.g. \"Visit Hospital\") instead of the fixed \"Read More\"<\/li>\n<li>Gutenberg block with a live preview and per-block overrides (posts per page, layout)<\/li>\n<li>Transient-based output caching with automatic invalidation, lazy-loaded images, minified assets, and conditional asset loading<\/li>\n<li>WooCommerce-aware: filtering the Product post type shows price and an Add to Cart button (AJAX-enabled) on every card template<\/li>\n<\/ul>\n\n<h4>Pro<\/h4>\n\n<p>Premium templates, a visual drag-and-drop layout builder, an advanced query builder, click analytics,\nand import\/export are available in Webcasata Content Filter Pro:\nhttps:\/\/www.webcasata.com\/webcasata-content-filter\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to \/wp-content\/plugins\/<\/li>\n<li>Activate through the \"Plugins\" menu in WordPress<\/li>\n<li>Go to \"Content Filter\" in the admin menu and create your first filter<\/li>\n<li>Copy the generated shortcode into any post or page, or add the \"Webcasata Content Filter\" block instead<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20with%20woocommerce%3F\"><h3>Does this work with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. Select \"Product\" as the post type (and a product taxonomy such as Product Categories) and\nevery card template shows the product's price and the correct Add to Cart button -- simple,\nvariable, external, whatever WooCommerce decides -- with the same AJAX add-to-cart behavior\nWooCommerce's own theme templates use.<\/p><\/dd>\n<dt id=\"why%20don%27t%20i%20see%20all%20my%20post%20types%20in%20the%20%22select%20post%20type%22%20step%3F\"><h3>Why don't I see all my post types in the \"Select post type\" step?<\/h3><\/dt>\n<dd><p>Only post types that have a public taxonomy attached are listed, since this plugin's tabs are\nbuilt from that taxonomy's terms -- a post type with none would be a dead end here anyway. This is\nalso what keeps page-builder-internal post types (e.g. Elementor's \"Template\" and \"Floating\nElement\" entries) out of the list without this plugin needing to know those plugins exist. If a\npost type you expect is missing, check whether it has a public, admin-visible taxonomy registered\nto it.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20have%20hooks%20for%20developers%3F\"><h3>Does this plugin have hooks for developers?<\/h3><\/dt>\n<dd><p>Yes -- every action and filter this plugin exposes is documented with a working code example in\ndocs\/DEVELOPER.md inside the plugin folder, and directly in code as a comment above each\ndo_action()\/apply_filters() call.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Added a per-filter \"Card Button Label\" field under Display Options: give each filter's card\nbutton its own text (e.g. \"Read more about doctor\" for a Doctors filter, \"Visit Hospital\" for a\nHospitals filter) instead of the fixed \"Read More\". Leave it blank to keep the default text.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>WooCommerce compatibility: filtering the \"Product\" post type now shows each product's price and\nthe correct Add to Cart button (simple, variable, external -- WooCommerce decides) on every\nbuilt-in card template, with the same AJAX add-to-cart behavior WooCommerce's own templates use.<\/li>\n<li>The \"Select post type\" step now only lists post types that actually have a public taxonomy to\nbuild tabs from. Page-builder-internal post types (e.g. Elementor's \"Template\" and \"Floating\nElement\") no longer clutter the list; any post type with a real taxonomy attached is unaffected.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Refreshed the whole admin area -- filter list, the Add\/Edit wizard, and Settings -- with a cleaner\ncard-based layout, refined spacing\/colors, and smooth toggle switches for every on\/off option.<\/li>\n<li>Added per-filter \"Card Elements\" toggles under Display Options: show or hide the Title, Date,\nUsername\/Author, Excerpt, and Comment Count independently, for every built-in template. Off by\ndefault is \"show everything,\" so existing filters keep looking exactly as they did before\nupdating.<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>The \"Upgrade to Pro\" admin banner is now permanently dismissible: clicking its close button\nhides it right away and remembers the dismissal per admin user, so it does not come back on a\nlater visit, a different screen, or a new browser session.<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Changed the wbcf_after_save_filter extension hook to pass only the filter ID, not request\ndata -- consumers now read and sanitize their own specific form field directly from $_POST\ninside their own callback, matching how core's save_post hook works, rather than receiving\nraw request data as a hook argument.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Tested up to WordPress 7.1.<\/li>\n<li>Simplified an internal function name back to the plugin's standard \"wbcf\" prefix for consistency\n(was temporarily longer than necessary during an earlier naming fix).<\/li>\n<li>Documented, in code comments, why template\/view files' local variables aren't further prefixed:\nthey're always included from within a method's scope, never loaded standalone.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>All internal identifiers (classes, functions, constants, options, postmeta keys, the custom post\ntype slug, shortcode tag, AJAX actions, and script\/style handles) renamed from the \"wcf\"\/\"WCF\"\nprefix to \"wbcf\"\/\"WBCF\" to meet the required minimum prefix length. The plugin slug and text\ndomain are unchanged. Existing test filters will need to be recreated after updating, since the\ncustom post type's internal slug changed.<\/li>\n<li>Escaped output for post titles and author names in every template (previously relied on\nthe_title()\/the_author() directly, which do not escape by default).<\/li>\n<li>Unslashed $_POST once, centrally, before passing it to the wbcf_after_save_filter extension hook,\nrather than passing the raw superglobal.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Added DEVELOPER.md -- full reference for every action\/filter hook this plugin exposes, with\nworking code examples, covering both this plugin and Pro's own hooks.<\/li>\n<li>Various small additive hooks and a settings-application refactor added across 1.0.1-1.0.6, all in\nsupport of Pro's builder modules (Visual Layout Builder, Advanced Query Builder, Analytics,\nImport\/Export) -- see DEVELOPER.md for the full list; nothing here changes existing behavior.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: core filtering engine, admin UI, AJAX, 5 card templates, styling system,\nGutenberg block with live preview, output caching, and Load More\/Infinite Scroll pagination.<\/li>\n<\/ul>","raw_excerpt":"Create tabbed, AJAX-filtered showcases of your posts. No page reload. SEO-friendly initial render.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/355133","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=355133"}],"author":[{"embeddable":true,"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/webcasata"}],"wp:attachment":[{"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=355133"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=355133"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=355133"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=355133"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=355133"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=355133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}