{"id":320844,"date":"2026-06-12T20:04:47","date_gmt":"2026-06-12T20:04:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/promptless-cpt-pages\/"},"modified":"2026-09-03T17:34:53","modified_gmt":"2026-09-03T17:34:53","slug":"promptless-cpt-pages","status":"publish","type":"plugin","link":"https:\/\/kn.wordpress.org\/plugins\/promptless-cpt-pages\/","author":23458468,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.8.0","stable_tag":"0.8.0","tested":"7.1","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"Promptless CPT Pages","header_author":"Promptless WP","header_description":"Render CPT single pages with structured data display, layout variants, and admin or AI population. Works standalone or with Promptless WP.","assets_banners_color":"","last_updated":"2026-09-03 17:34:53","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/promptlesswp.com","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":694,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.5.3":{"tag":"0.5.3","author":"promptlesswp","date":"2026-06-12 20:04:21","revision":3570492},"0.6.0":{"tag":"0.6.0","author":"promptlesswp","date":"2026-06-15 02:05:50","revision":3572348},"0.6.1":{"tag":"0.6.1","author":"promptlesswp","date":"2026-06-24 00:28:34","revision":3583899},"0.6.2":{"tag":"0.6.2","author":"promptlesswp","date":"2026-06-25 15:13:32","revision":3586315},"0.6.3":{"tag":"0.6.3","author":"promptlesswp","date":"2026-07-03 12:29:42","revision":3595235},"0.6.4":{"tag":"0.6.4","author":"promptlesswp","date":"2026-07-05 15:08:02","revision":3596865},"0.6.5":{"tag":"0.6.5","author":"promptlesswp","date":"2026-07-11 14:40:39","revision":3604022},"0.6.6":{"tag":"0.6.6","author":"promptlesswp","date":"2026-07-16 12:28:36","revision":3610217},"0.6.7":{"tag":"0.6.7","author":"promptlesswp","date":"2026-07-23 17:56:04","revision":3620356},"0.6.8":{"tag":"0.6.8","author":"promptlesswp","date":"2026-08-07 13:17:08","revision":3637892},"0.6.9":{"tag":"0.6.9","author":"promptlesswp","date":"2026-08-13 12:24:20","revision":3645279},"0.7.0":{"tag":"0.7.0","author":"promptlesswp","date":"2026-08-19 16:35:35","revision":3655031},"0.7.2":{"tag":"0.7.2","author":"promptlesswp","date":"2026-08-21 19:04:21","revision":3659534},"0.8.0":{"tag":"0.8.0","author":"promptlesswp","date":"2026-09-03 17:34:53","revision":3680165}},"upgrade_notice":{"0.8.0":"<p>Fixes two data-handling bugs: deleting a post type destroyed grouping definitions it claimed to preserve, and &quot;purge data&quot; left most behind. Also stops a bug that created ~20 junk autoloaded options per grouping save, and clears existing ones automatically.<\/p>","0.7.2":"<p>Adds a Location \/ map field: enter an address and the single page shows a click-to-load map \u2014 no Google Maps API key or setup. Place it above, below, or in the sidebar, overridable per post. Works with or without Promptless WP. Additive; existing fields unchanged.<\/p>","0.7.1":"<p>Grouping items linked to another post now show the linked post (and its type) in the editor instead of a blank field, and flag a link whose target no longer exists. Editor-only clarity fix; no content, schema, or front-end changes. Recommended for all users.<\/p>","0.7.0":"<p>Gallery lightbox mobile navigation now matches Promptless WP: on phones and tablets the prev\/next controls sit in a bottom nav bar with the image counter between them, instead of side arrows overlapping wide photos. Recommended for all users.<\/p>","0.6.7":"<p>Adds the Gallery grouping variant: responsive photo grids with an accessible lightbox and per-definition tile aspect (16:9\/4:3\/1:1\/4:5) \u2014 ideal for property photo tours, vehicle galleries, and portfolios. Additive release; existing groupings are unchanged. Recommended for all users.<\/p>","0.6.6":"<p>Fixes grouping thumbnails rendering as thin slivers in sidebar and horizontal layouts. Adds a per-CPT archive image crop (square, 4:3, 4:5, 16:9). New CPTs now hide the post date and author byline on archive cards by default; existing CPTs are unchanged.<\/p>","0.6.5":"<p>Cross-CPT relationships: meta_match groupings can auto-pull posts from another post type (an agent page listing its properties). Also fixes archive filters named after post types redirecting away, unstyled embedded forms on cached pages, and  wrapping breaking image layout.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3605294,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3605294,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.5.3","0.6.0","0.6.1","0.6.2","0.6.3","0.6.4","0.6.5","0.6.6","0.6.7","0.6.8","0.6.9","0.7.0","0.7.2","0.8.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Admin UI for registering a custom post type \u2014 name, slug, labels, icon picker, archive on\/off","2":"Grouping definitions per CPT \u2014 define a named cluster of items sharing a layout variant and a position (above main \/ below main \/ sidebar)","3":"The per-post meta box for filling in grouping items, with the four layout-variant preview cards","4":"Frontend render of a CPT single page with the compact-grid variant for an \"amenities\" grouping","5":"Claude Cowork connector setup \u2014 opt-in App Password generation, default-disabled kill switch"}},"plugin_section":[],"plugin_tags":[2010,1487,20731,23364,129283],"plugin_category":[],"plugin_contributors":[265095],"plugin_business_model":[],"class_list":["post-320844","plugin","type-plugin","status-publish","hentry","plugin_tags-custom-fields","plugin_tags-custom-post-types","plugin_tags-post-template","plugin_tags-single-page","plugin_tags-structured-content","plugin_contributors-promptlesswp","plugin_committers-promptlesswp"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/promptless-cpt-pages\/assets\/icon-128x128.png?rev=3605294","icon_2x":"https:\/\/ps.w.org\/promptless-cpt-pages\/assets\/icon-256x256.png?rev=3605294","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Promptless CPT Pages provides a constrained, opinionated primitive for repeatable structured content on custom-post-type single pages:<\/p>\n\n<ul>\n<li>Register custom post types from an admin UI \u2014 no ACF \/ MetaBox \/ Pods dependency.<\/li>\n<li>Define \"groupings\" per CPT \u2014 named clusters of items sharing a layout variant and a position (above main \/ below main \/ sidebar).<\/li>\n<li>Items follow one shape \u2014 <code>{ image-or-icon, heading, supporting_text, optional link }<\/code>.<\/li>\n<li>Four layout variants per grouping \u2014 compact-grid, card-grid, featured-card, horizontal-row.<\/li>\n<li>Three source modes \u2014 <code>manual<\/code>, <code>child_posts<\/code>, <code>taxonomy_match<\/code>.<\/li>\n<li>Curated icon library of 53 icons across 13 categories, extensible via the <code>pre_icon_library<\/code> filter.<\/li>\n<li>Connector REST API + MCP tools (18 endpoints under <code>\/wp-json\/post-runtime\/v1\/connector\/<\/code>) so AI assistants like Claude Cowork can register CPTs, define groupings, populate per-post values, and preview rendered output.<\/li>\n<li>Design-token inheritance from Promptless WP \u2014 colors, spacing, typography, radii. Graceful fallback when Promptless is not installed.<\/li>\n<\/ul>\n\n<p>Promptless CPT Pages is positioned as a free companion plugin to Promptless WP (the page builder) and Promptless Forms (the form renderer). It owns dynamic CPT single-page rendering; it does not replace Promptless for landing-page composition or Promptless Forms for forms.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to one third-party service: the Iconify API. It is used solely to display icons that you choose to use, and only when you opt into using them. If you do not use Iconify icons, no external service is ever contacted.<\/p>\n\n<h4>Iconify API<\/h4>\n\n<p>What it is and what it is for: the plugin bundles the open-source <code>iconify-icon<\/code> web component locally (<code>assets\/js\/iconify-icon.min.js<\/code> \u2014 it is shipped inside the plugin and is NOT loaded from any CDN). When a CPT single page, archive card, grouping item, or post field uses an Iconify-format icon identifier written in <code>collection:name<\/code> form (for example <code>mdi:home<\/code> or <code>material-symbols:business-outline<\/code>), the web component requests that single icon's SVG path data from the Iconify API at render time so the icon can be displayed. This is what makes 200,000+ open-source icons available without bundling them all into the plugin.<\/p>\n\n<p>What data is sent, and when: only the icon identifier you chose to use (for example <code>mdi:home<\/code>) is sent, as part of the request URL, at the moment a page containing that icon is viewed in a visitor's browser. The request is made by the visitor's browser \u2014 not by your server. No personal data, no user content, no site URL, and no identifiers of any kind are transmitted.<\/p>\n\n<p>When it is NOT contacted: the plugin also ships a built-in library of 53 icons that render inline as SVG with zero network requests. If you use only those built-in icons \u2014 or no icons at all \u2014 the Iconify API is never contacted.<\/p>\n\n<p>Service provider: Iconify (Iconify O\u00dc).<\/p>\n\n<p>Endpoints contacted: https:\/\/api.iconify.design (primary), with https:\/\/api.simplesvg.com and https:\/\/api.unisvg.com as automatic fallbacks used only if the primary endpoint is unreachable.<\/p>\n\n<p>Terms of use: https:\/\/iconify.design\/docs\/api\/ \u2014 the Iconify API is a free, open-source public service released under the Apache 2.0 License; the \"Public API\" section documents the terms of use.<\/p>\n\n<p>Privacy policy: https:\/\/iconify.design\/privacy\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code> or install via WP Admin \u2192 Plugins \u2192 Add New \u2192 Upload Plugin.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen in WordPress.<\/li>\n<li>Visit <strong>Post Runtime \u2192 CPTs<\/strong> in the admin to register your first custom post type.<\/li>\n<li>To enable the Claude Cowork connector, visit <strong>Post Runtime \u2192 Claude Connection<\/strong> and follow the setup steps.<\/li>\n<\/ol>\n\n<p>For full documentation see <code>CLAUDE.md<\/code> and <code>docs\/<\/code> inside the plugin folder.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20require%20promptless%20wp%3F\"><h3>Does this plugin require Promptless WP?<\/h3><\/dt>\n<dd><p>No. PRE renders standalone with sensible default styling. When Promptless WP is active, PRE automatically inherits its <code>--aisb-*<\/code> design tokens for visual consistency.<\/p><\/dd>\n<dt id=\"can%20i%20use%20existing%20acf%20%2F%20metabox%20fields%20with%20groupings%3F\"><h3>Can I use existing ACF \/ MetaBox fields with groupings?<\/h3><\/dt>\n<dd><p>Not in this version. Promptless CPT Pages owns its own field model end-to-end via grouping items. ACF interop is out of scope for v0.x.<\/p><\/dd>\n<dt id=\"where%20is%20the%20data%20stored%3F\"><h3>Where is the data stored?<\/h3><\/dt>\n<dd><p>Per-post grouping values live in WordPress post meta. CPT and grouping definitions live in <code>wp_options<\/code>. No custom database tables.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.8.0<\/h4>\n\n<ul>\n<li>Added: the connector can now list and delete the posts it creates. Previously it could build a set of content and then had no way to review or undo it without going into wp-admin by hand.<\/li>\n<li>Added: re-registering a post type you deleted earlier now tells you what came back \u2014 existing groupings, fields and posts \u2014 instead of looking like a fresh start and then failing confusingly.<\/li>\n<li>Fixed: deleting a post type destroyed its grouping definitions even though it reported that your data was preserved. Re-registering brought back content that could no longer be displayed. Nothing is destroyed now unless you explicitly ask to purge.<\/li>\n<li>Fixed: \"purge data\" left most of the data behind \u2014 field definitions, saved values and backup rows. It now removes all of it.<\/li>\n<li>Fixed: every grouping save created around 20 junk database options that were loaded on every page request, growing with each save. Rows already on your site are removed automatically the first time you visit wp-admin after updating.<\/li>\n<li>Fixed: the connector used up its hourly request allowance about twice as fast as it should have.<\/li>\n<li>Fixed: the connector could not reach an HTTPS local development site.<\/li>\n<\/ul>\n\n<h4>0.7.2<\/h4>\n\n<ul>\n<li>Added: a new \"Location \/ map\" field type. Enter a street address on a post and its single page shows a click-to-load map \u2014 no Google Maps API key, no coordinates, no setup. Cards and archive listings show the address as text. You choose the zoom level (street \/ neighborhood \/ city), whether the map loads on click (privacy-friendly, the default) or automatically, and whether to show a \"Get directions\" link. You also choose where the map sits on the page \u2014 above the content, below it, or in the sidebar \u2014 the same placement control your grouping sections use, and each post can override it. If a post has no address, the map uses your Business Identity address (when Promptless WP is set up). The map is self-contained \u2014 it does NOT require Promptless WP and works on any theme; when Promptless WP is active the map simply picks up your brand colours automatically. Works from the editor by hand or through the AI connector.<\/li>\n<li>Updated: tested up to WordPress 7.1.<\/li>\n<\/ul>\n\n<h4>0.7.1<\/h4>\n\n<ul>\n<li>Fixed: single-post pages (such as a speaker or session profile) now align their content and hero image to the same layout width as the floating navigation and page sections, instead of extending slightly past it on the left and right.<\/li>\n<li>Fixed: in the post editor, a grouping item linked to another post now clearly shows which post it is linked to (and the post type), instead of leaving the link field looking empty. A link whose target has been deleted is flagged. Makes existing connections visible and verifiable at a glance. Editor-only; no content or data changes.<\/li>\n<\/ul>\n\n<h4>0.7.0<\/h4>\n\n<ul>\n<li>Fixed: on phones and tablets, the gallery lightbox prev\/next controls now sit in a bottom nav bar with the image counter between them (matching Promptless WP), instead of side arrows overlapping the photo. The counter shows the compact \"2 \/ 4\" for consistency, with the full \"Image 2 of 4\" kept for screen readers.<\/li>\n<\/ul>\n\n<h4>0.6.9<\/h4>\n\n<ul>\n<li>Improved: the \"Copy Command\" button on the Connector setup screen now sits below the command block instead of overlaying it, fixing a tap-target overlap and a color-contrast issue.<\/li>\n<\/ul>\n\n<h4>0.6.8<\/h4>\n\n<ul>\n<li>Improved: gallery lightbox caption and counter now share one design language with Promptless WP galleries<\/li>\n<li>Fixed: badge collision on overlay-hero cards; CSS now cache-busts by file modification time<\/li>\n<li>Improved: image-overlay fields flow into the content area on compact Post Grid rows<\/li>\n<\/ul>\n\n<p>WordPress truncates this section at 5,000 characters, so it keeps a rolling window of the\nsix most recent releases. The complete history lives in CHANGELOG.md in the plugin folder,\nand on the GitHub releases page.<\/p>","raw_excerpt":"Render CPT single pages with structured data display, layout variants, and admin or AI population. Works standalone or with Promptless WP.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/kn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/320844","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/kn.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/kn.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=320844"}],"author":[{"embeddable":true,"href":"https:\/\/kn.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/promptlesswp"}],"wp:attachment":[{"href":"https:\/\/kn.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=320844"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/kn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=320844"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/kn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=320844"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/kn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=320844"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/kn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=320844"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/kn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=320844"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}