{"id":261800,"date":"2026-05-19T14:52:14","date_gmt":"2026-05-19T14:52:14","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/kayce-custom-archive-sections\/"},"modified":"2026-05-22T10:08:13","modified_gmt":"2026-05-22T10:08:13","slug":"kayce-custom-archive-sections","status":"publish","type":"plugin","link":"https:\/\/cy.wordpress.org\/plugins\/kayce-custom-archive-sections\/","author":23374391,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.1","stable_tag":"1.1.1","tested":"7.0","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Kayce Custom Archive Sections","header_author":"rohitkc32,wpkacey","header_description":"Create and manage reusable content sections that automatically display before or after posts on your blog index and category archive pages. Designed to work seamlessly with Gutenberg and Elementor.","assets_banners_color":"b9c3f5","last_updated":"2026-05-22 10:08:13","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/wpkayce\/kayce-custom-archive-sections","header_author_uri":"https:\/\/wpkayce.io","rating":0,"author_block_rating":0,"active_installs":0,"downloads":109,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"wpkayce","date":"2026-05-20 04:52:41"},"1.1.0":{"tag":"1.1.0","author":"wpkayce","date":"2026-05-22 08:40:12"},"1.1.1":{"tag":"1.1.1","author":"wpkayce","date":"2026-05-22 10:08:13"}},"upgrade_notice":{"1.1.1":"<p>Bug fix release \u2014 resolves section display issues on FSE \/ block themes (single posts, After Header position, layout style breaking on reload), post content disappearing after sections render, stale output after theme switch, and After Header sections staying inside the sidebar column on ColorMag and similar themes.<\/p>","1.1.0":"<p>Major feature update \u2014 adds a new After Header position with cross-theme support, Quick Edit, bulk actions, sortable columns, a Settings page for cache control, single-post support, a fully redesigned meta box UI, and fixes for dynamic block context on single posts and archive pages. No data migration or manual steps required; simply update and activate.<\/p>","1.0.0":"<p>Initial release \u2014 no upgrade steps required.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3538260,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3538260,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0","1.1.1"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"The Archive Sections list table with Active, Location, Position, and Visibility columns.","2":"The Archive Section Settings meta box showing all controls: location, specific-category picker, position, active toggle, visibility, and preview link.","3":"A custom section displayed before the post loop on a category archive page.","4":"A custom section displayed after the post loop on the blog index page."}},"plugin_section":[],"plugin_tags":[1445,323,89,263544,148076],"plugin_category":[],"plugin_contributors":[263545,263546],"plugin_business_model":[],"class_list":["post-261800","plugin","type-plugin","status-publish","hentry","plugin_tags-archive","plugin_tags-blog","plugin_tags-category","plugin_tags-content-sections","plugin_tags-gutenberg","plugin_contributors-rohitkc32","plugin_contributors-wpkayce","plugin_committers-wpkayce"],"banners":{"banner":"https:\/\/ps.w.org\/kayce-custom-archive-sections\/assets\/banner-772x250.png?rev=3538260","banner_2x":"https:\/\/ps.w.org\/kayce-custom-archive-sections\/assets\/banner-1544x500.png?rev=3538260","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/kayce-custom-archive-sections_b9c3f5.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Kayce Custom Archive Sections<\/strong> lets you create and manage reusable content areas that appear automatically before or after the post loop on your WordPress archive pages \u2014 no theme file editing required.<\/p>\n\n<p>Each section is a regular WordPress post, so you can design it with the <strong>block editor (Gutenberg)<\/strong> or <strong>Elementor<\/strong>, publish it once, and it shows up exactly where you set it.<\/p>\n\n<p>The plugin works with both <strong>classic PHP themes<\/strong> and modern <strong>Full Site Editing (FSE) \/ block themes<\/strong> like Twenty Twenty-Five \u2014 out of the box, with no extra configuration.<\/p>\n\n<p><strong>Archive locations supported:<\/strong><\/p>\n\n<ul>\n<li>Blog index (Posts page)<\/li>\n<li>All category archives<\/li>\n<li>Specific category archives \u2014 target individual categories with a built-in category picker<\/li>\n<li>Tag archives<\/li>\n<li>Author archives<\/li>\n<li>Search results pages<\/li>\n<li>Date archives<\/li>\n<\/ul>\n\n<p><strong>Display controls:<\/strong><\/p>\n\n<ul>\n<li><strong>Before or after<\/strong> the post loop \u2014 per section<\/li>\n<li><strong>Active \/ Inactive toggle<\/strong> \u2014 publish a section without displaying it yet<\/li>\n<li><strong>Visibility by login state<\/strong> \u2014 show to everyone, logged-in users only, or logged-out visitors only<\/li>\n<\/ul>\n\n<p><strong>Admin experience:<\/strong><\/p>\n\n<ul>\n<li>At-a-glance list table with Active, Location, Position, and Visibility columns<\/li>\n<li>One-click <strong>Duplicate<\/strong> action to clone any section as a draft<\/li>\n<li><strong>Preview link<\/strong> in the meta box that jumps straight to the relevant archive page<\/li>\n<li>Display order controlled via the standard <strong>Order<\/strong> field (Page Attributes)<\/li>\n<\/ul>\n\n<p><strong>Performance &amp; security:<\/strong><\/p>\n\n<ul>\n<li><strong>Transient caching<\/strong> \u2014 sections are cached per location, position, and login state; cache is busted automatically when a section is saved or the plugin is deactivated<\/li>\n<li>Admin CSS and JavaScript load <strong>only on the Archive Sections edit screen<\/strong> \u2014 zero frontend asset overhead<\/li>\n<li>All inputs validated against whitelists; category IDs cast with <code>absint()<\/code>; nonces verified with <code>sanitize_key()<\/code><\/li>\n<li>Works with all standard caching plugins<\/li>\n<\/ul>\n\n<p><strong>For developers:<\/strong><\/p>\n\n<ul>\n<li><code>kcas_query_args<\/code> \u2014 filter the WP_Query args before sections are fetched<\/li>\n<li><code>kcas_section_html<\/code> \u2014 filter the HTML of an individual section<\/li>\n<li><code>kcas_sections_html<\/code> \u2014 filter the complete output wrapper HTML<\/li>\n<li><code>kcas_before_sections<\/code> \u2014 action fires before the sections wrapper is output<\/li>\n<li><code>kcas_after_sections<\/code> \u2014 action fires after the sections wrapper is output<\/li>\n<li>Sections are wrapped in <code>&lt;section class=\"kcas-archive-section\" id=\"kcas-section-{ID}\"&gt;<\/code> and <code>&lt;div class=\"kcas-archive-sections kcas-archive-sections--{before|after}\"&gt;<\/code> for easy CSS targeting<\/li>\n<\/ul>\n\n<p><strong>Perfect for:<\/strong><\/p>\n\n<ul>\n<li>Hero banners or intro text above your blog feed<\/li>\n<li>Promotional blocks, CTA banners, or newsletter sign-ups below posts<\/li>\n<li>Category-specific messaging (e.g. a disclaimer on a legal advice category)<\/li>\n<li>Showing different content to logged-in members vs. public visitors<\/li>\n<li>Search results page enhancements<\/li>\n<\/ul>\n\n<!--section=installation-->\n<p><strong>From the WordPress Plugin Directory<\/strong><\/p>\n\n<ol>\n<li>Go to <strong>Plugins \u2192 Add New<\/strong> in your WordPress admin.<\/li>\n<li>Search for <strong>Kayce Custom Archive Sections<\/strong>.<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<\/ol>\n\n<p><strong>Manual Installation<\/strong><\/p>\n\n<ol>\n<li>Download the plugin ZIP file.<\/li>\n<li>Go to <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Upload the ZIP and click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<\/ol>\n\n<p><strong>Getting Started<\/strong><\/p>\n\n<ol>\n<li>After activation, go to <strong>Archive Sections \u2192 Add New<\/strong> in the admin menu.<\/li>\n<li>Write or design your section content using the block editor or Elementor.<\/li>\n<li>In the <strong>Archive Section Settings<\/strong> meta box on the right, configure:\n\n<ul>\n<li><strong>Location<\/strong> \u2014 choose which archive page(s) to target. Selecting <em>Specific Categories<\/em> reveals a category picker.<\/li>\n<li><strong>Position<\/strong> \u2014 before or after the post loop.<\/li>\n<li><strong>Active<\/strong> \u2014 tick to enable the section immediately.<\/li>\n<li><strong>Visibility<\/strong> \u2014 show to everyone, logged-in users only, or logged-out visitors only.<\/li>\n<\/ul><\/li>\n<li>Click <strong>Publish<\/strong>.<\/li>\n<li>Visit the matching archive page \u2014 your section will appear automatically.<\/li>\n<\/ol>\n\n<p><strong>Tip:<\/strong> Use the <strong>Order<\/strong> field (Page Attributes panel) to control display order when multiple sections share the same location and position. Lower numbers appear first.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20with%20any%20theme%3F\"><h3>Does this work with any theme?<\/h3><\/dt>\n<dd><p>Yes \u2014 including Full Site Editing (block) themes like Twenty Twenty-Five. The plugin automatically detects whether your active theme is a classic or block theme and uses the correct rendering pipeline for each.<\/p><\/dd>\n<dt id=\"can%20i%20use%20elementor%20to%20design%20my%20sections%3F\"><h3>Can I use Elementor to design my sections?<\/h3><\/dt>\n<dd><p>Yes. The Archive Section custom post type has <code>show_in_rest<\/code> enabled, making it fully compatible with the block editor. Elementor also supports editing custom post types, so you can build sections visually with Elementor as well.<\/p><\/dd>\n<dt id=\"can%20i%20target%20a%20specific%20category%20page%3F\"><h3>Can I target a specific category page?<\/h3><\/dt>\n<dd><p>Yes. Set the location to <strong>Specific Categories<\/strong>, then tick the categories you want in the category picker that appears below. The section will only display on those category archives.<\/p><\/dd>\n<dt id=\"can%20i%20show%20different%20content%20to%20logged-in%20and%20logged-out%20users%3F\"><h3>Can I show different content to logged-in and logged-out users?<\/h3><\/dt>\n<dd><p>Yes. Each section has a <strong>Visibility<\/strong> setting: <em>Everyone<\/em>, <em>Logged-in users only<\/em>, or <em>Logged-out visitors only<\/em>.<\/p><\/dd>\n<dt id=\"how%20do%20i%20temporarily%20disable%20a%20section%20without%20deleting%20it%3F\"><h3>How do I temporarily disable a section without deleting it?<\/h3><\/dt>\n<dd><p>Uncheck the <strong>Active<\/strong> checkbox in the meta box and update the post. The section will be saved but will no longer display on the front end.<\/p><\/dd>\n<dt id=\"how%20do%20i%20control%20the%20order%20of%20multiple%20sections%3F\"><h3>How do I control the order of multiple sections?<\/h3><\/dt>\n<dd><p>Set the <strong>Order<\/strong> value in the Page Attributes panel (lower numbers appear first). Sections with the same order value are sorted alphabetically by title.<\/p><\/dd>\n<dt id=\"will%20the%20sections%20appear%20on%20the%20front%20end%20straight%20away%3F\"><h3>Will the sections appear on the front end straight away?<\/h3><\/dt>\n<dd><p>Yes \u2014 as soon as you publish an active section with a location and position set, it will appear on the matching archive page. The transient cache is cleared automatically on save.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20add%20any%20database%20tables%3F\"><h3>Does the plugin add any database tables?<\/h3><\/dt>\n<dd><p>No. The plugin uses WordPress's standard <code>wp_posts<\/code>, <code>wp_postmeta<\/code>, and <code>wp_options<\/code> tables only.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20down%20my%20site%3F\"><h3>Will it slow down my site?<\/h3><\/dt>\n<dd><p>No. Sections are cached in transients after the first load, so subsequent page views skip the database query entirely. The cache is split by location, position, and login state to ensure visitors always see the correct content. Admin assets (CSS\/JS) are only loaded on the Archive Sections edit screen.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20delete%20the%20plugin%3F\"><h3>What happens when I delete the plugin?<\/h3><\/dt>\n<dd><p>The included <code>uninstall.php<\/code> permanently deletes all Archive Section posts and their meta data when the plugin is removed from <strong>Plugins \u2192 Installed Plugins \u2192 Delete<\/strong>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.1<\/h4>\n\n<p><strong>Bug fixes<\/strong><\/p>\n\n<ul>\n<li>Fixed sections with the Single Post location not appearing on FSE \/ block themes \u2014 the render_block filter now targets <code>core\/post-content<\/code> in addition to <code>core\/query<\/code>.<\/li>\n<li>Fixed After Header and Before Posts positions on FSE singular pages injecting between the featured image and post body. Both positions now inject after the header template part, before the post title and featured image.<\/li>\n<li>Fixed section design breaking on every other page load. WordPress generates dynamic layout class names (<code>wp-container-*-is-layout-N<\/code>) that increment globally; caching rendered HTML caused class\/CSS mismatches on subsequent requests. The cache now stores raw section data and blocks are rendered fresh on each request.<\/li>\n<li>Fixed post content disappearing after sections were rendered \u2014 missing <code>wp_reset_postdata()<\/code> call after the section rendering loop.<\/li>\n<li>Fixed stale section output after switching themes \u2014 cache is now busted automatically on <code>switch_theme<\/code>.<\/li>\n<li>Fixed After Header sections on classic themes with a sidebar (e.g. ColorMag) remaining inside the primary content column. The JS repositioner now loops until stable, correctly lifting the section to full-width outside the columns row.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<p><strong>New positions<\/strong><\/p>\n\n<ul>\n<li>Added <strong>After header<\/strong> (<code>before_content<\/code>) position \u2014 injects the section between the site header and the page content area, outside the posts grid.<\/li>\n<li>Theme-specific hook cascade fires in the structurally correct location for Astra, Genesis Framework, OceanWP, Kadence, Neve, WooCommerce Storefront, Hestia, ColorMag, Blocksy, Hello Elementor, Divi, and Enfold.<\/li>\n<li>JavaScript safety net automatically repositions sections that land inside a posts-loop container on unsupported classic themes (detects <code>article<\/code> siblings, moves section before the grid with no page reload).<\/li>\n<li>Position field in the meta box is now hidden when Location is set to Disabled \u2014 no confusing options for inactive sections.<\/li>\n<li>Visibility options now display one option per row for full readability in the narrow sidebar meta box.<\/li>\n<\/ul>\n\n<p><strong>New features<\/strong><\/p>\n\n<ul>\n<li><strong>Quick Edit<\/strong> \u2014 update Active, Position, and Visibility directly from the list table without opening the edit screen.<\/li>\n<li><strong>Bulk actions<\/strong> \u2014 activate or deactivate multiple sections at once from the list table.<\/li>\n<li><strong>Sortable columns<\/strong> \u2014 Active, Location, Position, and Visibility column headers are all sortable.<\/li>\n<li><strong>Settings page<\/strong> (Archive Sections \u2192 Settings) \u2014 configure transient cache expiry (0\u2013168 hours); set to 0 to disable caching entirely.<\/li>\n<li><strong>Activation welcome notice<\/strong> \u2014 a one-time admin notice appears after activation with a direct link to create the first section.<\/li>\n<li><strong>Single post support<\/strong> \u2014 sections can now target individual post pages (<code>is_single()<\/code>), not just archive pages.<\/li>\n<\/ul>\n\n<p><strong>Admin UI redesign<\/strong><\/p>\n\n<ul>\n<li>Archive Section Settings meta box fully redesigned: CSS toggle switch for Active state, two-column Dashicon card grid for Location, segmented button groups for Position and Visibility, styled category search with a leading icon, and a full-width Preview button.<\/li>\n<li>Category list items show a post-count badge; checked items are highlighted in blue.<\/li>\n<li>Friendly empty-state card with a Create CTA shown when no sections exist yet.<\/li>\n<\/ul>\n\n<p><strong>Dynamic block context fixes<\/strong><\/p>\n\n<ul>\n<li>On single posts and static pages: dynamic blocks (<code>core\/post-title<\/code>, <code>core\/post-excerpt<\/code>, <code>core\/post-featured-image<\/code>, etc.) now correctly resolve against the viewed post rather than the section post itself.<\/li>\n<li>On archive pages (category, tag, author, search, date): post-specific blocks return empty rather than showing the section's own data; archive-aware blocks (<code>core\/archive-title<\/code>, <code>core\/term-description<\/code>) are unaffected.<\/li>\n<li>Cache for the <code>single_post<\/code> location now includes the viewed post ID in the cache key, so each post gets its own cached copy.<\/li>\n<\/ul>\n\n<p><strong>Bug fixes<\/strong><\/p>\n\n<ul>\n<li>FSE \/ block themes: fixed duplicate section injection on pages that render multiple Query Loop blocks with <code>inherit: true<\/code>.<\/li>\n<li>Cache: <code>single_post<\/code> was missing from the locations list used during cache bust and <code>uninstall.php<\/code> cleanup.<\/li>\n<li>Frontend assets now enqueued only on archive and singular pages \u2014 zero overhead on all other pages.<\/li>\n<\/ul>\n\n<p><strong>Developer \/ i18n<\/strong><\/p>\n\n<ul>\n<li>All user-facing strings wrapped in the <code>kayce-custom-archive-sections<\/code> text domain.<\/li>\n<li>Added <code>languages\/kayce-custom-archive-sections.pot<\/code> template for translators.<\/li>\n<li>Full CPT label set: <code>archives<\/code>, <code>attributes<\/code>, <code>items_list<\/code>, <code>items_list_navigation<\/code>, <code>filter_items_list<\/code>, and more.<\/li>\n<li>New frontend script (<code>frontend.js<\/code>) enqueued only on relevant pages; sections expose <code>kcas-archive-sections--before_content<\/code> class for custom CSS targeting.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Custom post type (<code>kcas_section<\/code>) for creating reusable archive sections.<\/li>\n<li>Display sections before or after posts on the <strong>blog index<\/strong> and <strong>category archive<\/strong> pages.<\/li>\n<li>Support for <strong>specific category targeting<\/strong> with a scrollable category picker.<\/li>\n<li>Additional archive locations: <strong>tag archives<\/strong>, <strong>author archives<\/strong>, <strong>search results<\/strong>, <strong>date archives<\/strong>.<\/li>\n<li>Per-section <strong>Active \/ Inactive toggle<\/strong>.<\/li>\n<li>Per-section <strong>login-state visibility<\/strong> control (everyone \/ logged-in \/ logged-out).<\/li>\n<li>Admin list table columns: Active, Location, Position, Visibility.<\/li>\n<li><strong>Duplicate \/ Clone<\/strong> row action with nonce and capability checks.<\/li>\n<li><strong>Preview link<\/strong> in the meta box resolving the real archive URL per location type.<\/li>\n<li><strong>Transient caching<\/strong> with version-stamped keys; login state included in cache key; targeted per-location cache busting on save.<\/li>\n<li>Admin CSS and JS enqueued only on the Archive Section edit screen (zero front-end overhead).<\/li>\n<li>Full compatibility with <strong>classic themes<\/strong> (loop_start \/ loop_end pipeline) and <strong>FSE \/ block themes<\/strong> (render_block filter pipeline).<\/li>\n<li>Fully compatible with <strong>Gutenberg<\/strong> and <strong>Elementor<\/strong>.<\/li>\n<li>Developer hooks: <code>kcas_query_args<\/code>, <code>kcas_section_html<\/code>, <code>kcas_sections_html<\/code>, <code>kcas_before_sections<\/code>, <code>kcas_after_sections<\/code>.<\/li>\n<li><code>uninstall.php<\/code> for clean removal.<\/li>\n<\/ul>","raw_excerpt":"Add reusable content sections before or after posts on any archive page \u2014 blog index, categories, tags, authors, search results, and more.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/261800","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=261800"}],"author":[{"embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/wpkayce"}],"wp:attachment":[{"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=261800"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=261800"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=261800"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=261800"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=261800"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=261800"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}