{"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-23T02:15:52","modified_gmt":"2026-09-23T02:15:52","slug":"webcasata-content-filter","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/webcasata-content-filter\/","author":23488074,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.4","stable_tag":"trunk","tested":"7.1.2","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-23 02:15:52","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":48,"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>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<\/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%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.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:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/355133","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=355133"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/webcasata"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=355133"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=355133"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=355133"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=355133"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=355133"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=355133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}