Custom Post Type Architect
Version: 1.0.0
Updated: 2026-05-24
Category: content-creation
Status: stable
Requires: Respira for WordPress plugin 7.1+ + MCP server
Description
Given a brief — "I need a portfolio with case studies" or "we run a podcast and want each episode to be its own page" — design and create the WordPress custom post type, supporting taxonomies, and ACF field group end to end. Uses the new v7.1 MCP tools: respira_create_post_type, respira_create_taxonomy, respira_create_acf_field_group.
The output is a fully wired content architecture, ready to use:
- The CPT itself (labels, supports, public-vs-private, has_archive, REST exposure)
- Supporting taxonomies (e.g. industries for case studies, seasons for podcast episodes)
- ACF field group bound to the CPT (custom fields the editor sees)
- 1–2 sample entries so the agent can verify the rendering
- Builder-aware single-template suggestion for the active builder
When to Use
- Setting up a portfolio, case studies, team members, events, podcast episodes, recipes, properties, locations, products-but-not-WooCommerce, FAQs, testimonials, courses, lessons, or any structured content type
- Migrating away from custom-fields-in-posts to a proper content type
- Auditing an existing site that's overloaded the default "post" type with non-blog content
Trigger Phrases
- "create a custom post type"
- "build a portfolio"
- "set up a case study type"
- "add a team members section"
- "scaffold a CPT"
- "create a podcast post type"
- "build an events section"
- "we need a new content type"
Execution Workflow
Step 1 — Confirm site + builder
Call respira_get_active_site and respira_get_builder_info. The builder choice affects Step 6 (template suggestion).
Step 2 — Understand the brief
Ask the user three short questions if not already clear from their request:
- What is the content? (case studies, podcast episodes, team, events, ...)
- How is it organized? (categories, tags, custom taxonomies — e.g. case studies organized by industry + service-type)
- What fields does each entry need? (e.g. case study: client name, hero image, deliverables, outcomes, before/after metrics, related case studies)
If the user can't articulate the fields, propose a default set based on the content type. Default sets:
- Case studies: client name, industry (taxonomy), service-type (taxonomy), hero image, brief, deliverables, outcomes, key metrics (3-5), client logo, related case studies (relationship)
- Team members: name, role, bio, headshot, social links (LinkedIn / X / personal site), department (taxonomy)
- Events: title, date/time, location, address, virtual/in-person, registration URL, capacity, hero image
- Podcast episodes: title, episode number, season (taxonomy), audio file URL, duration, show notes, guest name, guest links
- Properties (real estate): address, price, bedrooms, bathrooms, sqm, status (taxonomy: for-sale / sold / under-offer), gallery, neighborhood (taxonomy)
- Recipes: title, prep time, cook time, servings, ingredients (repeater), steps (repeater), category (taxonomy), cuisine (taxonomy), difficulty, dietary tags
Step 3 — Design the CPT shape
Output the proposed shape for user review:
## Proposed CPT: `case_study`
- **Singular label:** Case Study
- **Plural label:** Case Studies
- **Menu icon:** dashicons-portfolio
- **Public:** yes
- **Has archive:** yes (URL: /case-studies/)
- **Supports:** title, editor, thumbnail, excerpt, revisions
- **REST API:** exposed (so the builder + Respira can read/write)
- **Hierarchical:** no
- **Show in admin menu:** yes, position 25 (under Pages)
## Supporting taxonomies
1. `case_study_industry` — Industries (e.g. SaaS, e-commerce, healthcare)
2. `case_study_service` — Service types (e.g. branding, website, copywriting)
## ACF field group: `Case Study Fields`
- Hero image (image, required)
- Client name (text, required)
- Brief (textarea)
- Deliverables (repeater — title + description)
- Outcomes (repeater — metric name + before + after)
- Client logo (image)
- Related case studies (relationship → case_study)
Wait for confirmation. The user might want to add or remove fields.
Step 4 — Create the CPT + taxonomies
After confirmation, run the create calls:
respira_create_post_type — creates the CPT with the proposed shape
respira_create_taxonomy — once per supporting taxonomy, bound to the CPT
respira_create_acf_field_group — the ACF field group, bound to the CPT via location rules
Each call should report back: "✓ Created CPT case_study" / "✓ Created taxonomy case_study_industry" / "✓ Created ACF field group with 8 fields bound to case_study."
Step 5 — Generate sample entries
Create 1–2 sample entries so the user can immediately see the CPT working in the admin and the editor renders correctly. Use respira_create_custom_post with realistic but generic content (no real customer names — generic personas like "BrandQ" or "agency-A").
The sample entries should populate every ACF field so the user can see the full shape.
Step 6 — Suggest a builder-specific single template
Based on the active builder, suggest where to create the single template:
- Bricks: "Create a single template at Templates → Add New → Type: Single → Conditions: Post Type = case_study. Suggested elements: ..."
- Elementor: "Create a single template at Templates → Theme Builder → Single → Add Conditions → Posts: case_study. Suggested widgets: ..."
- Divi: "Create a Theme Builder template at Divi → Theme Builder → Add Template → Posts: case_study. Suggested modules: ..."
- Gutenberg / FSE theme: "Create a single-case_study.html template in the theme or via Appearance → Editor → Templates → Add → Single Item: Case Study."
- Oxygen / Breakdance: "Create a Single template targeting case_study."
If the user wants to scaffold the template now, offer to build it: that's a separate skill flow (use respira_build_page against the single template surface for the chosen builder).
Step 7 — Verify
Output a summary with:
- The CPT slug + admin URL (
/wp-admin/edit.php?post_type=case_study)
- The archive URL on the front-end (
/case-studies/)
- The 2 sample entry URLs
- A note about whether the single template was scaffolded or left for the user
Hard rules
- Always ask before creating. The CPT shape preview in Step 3 is mandatory. Customers will be writing into this CPT for years — get it right the first time.
- Use snake_case slugs (
case_study, case_study_industry) — never spaces or hyphens. WordPress CPT slugs have a 20-character hard limit.
- Always expose
show_in_rest so the builder + Respira can read/write the CPT. If show_in_rest is false, the post type is invisible to the REST API and most modern builders break on it.
- Never name a CPT
post, page, attachment, revision, nav_menu_item, custom_css, customize_changeset, oembed_cache, user_request, wp_block, wp_template, wp_template_part, wp_global_styles, wp_navigation — these are reserved.
- ACF field group location rules must bind to the CPT (
post_type == case_study), not to a category or template. Wrong location rule = fields invisible in the admin.
- Sample entries use generic personas. Never use real customer names from memory or any other source.
Telemetry
Records: site URL hash, CPT slug created, taxonomy count, ACF field count, builder active, sample entries created, success/failure. No CPT names, no field values, no content sent.
Endpoint: POST https://www.respira.press/api/skills/track-usage
1---2name: custom-post-type-architect3description: Design and create WordPress custom post types end to end — CPT + supporting taxonomies + ACF field group + sample entries + builder-specific single template suggestion. Uses new v7.1 MCP tools: respira_create_post_type, respira_create_taxonomy, respira_create_acf_field_group.4license: MIT5---6
7# Custom Post Type Architect
8
9**Version:** 1.0.0
10**Updated:** 2026-05-24
11**Category:** content-creation
12**Status:** stable
13**Requires:** Respira for WordPress plugin 7.1+ + MCP server
14
15---
16
17## Description
18
19Given a brief — "I need a portfolio with case studies" or "we run a podcast and want each episode to be its own page" — design and create the WordPress custom post type, supporting taxonomies, and ACF field group end to end. Uses the new v7.1 MCP tools: `respira_create_post_type`, `respira_create_taxonomy`, `respira_create_acf_field_group`.
20
21The output is a fully wired content architecture, ready to use:
22
231. The CPT itself (labels, supports, public-vs-private, has_archive, REST exposure)
242. Supporting taxonomies (e.g. industries for case studies, seasons for podcast episodes)
253. ACF field group bound to the CPT (custom fields the editor sees)
264. 1–2 sample entries so the agent can verify the rendering
275. Builder-aware single-template suggestion for the active builder
28
29---
30
31## When to Use
32
33- Setting up a portfolio, case studies, team members, events, podcast episodes, recipes, properties, locations, products-but-not-WooCommerce, FAQs, testimonials, courses, lessons, or any structured content type
34- Migrating away from custom-fields-in-posts to a proper content type
35- Auditing an existing site that's overloaded the default "post" type with non-blog content
36
37---
38
39## Trigger Phrases
40
41- "create a custom post type"
42- "build a portfolio"
43- "set up a case study type"
44- "add a team members section"
45- "scaffold a CPT"
46- "create a podcast post type"
47- "build an events section"
48- "we need a new content type"
49
50---
51
52## Execution Workflow
53
54### Step 1 — Confirm site + builder
55
56Call `respira_get_active_site` and `respira_get_builder_info`. The builder choice affects Step 6 (template suggestion).
57
58### Step 2 — Understand the brief
59
60Ask the user three short questions if not already clear from their request:
61
621. **What is the content?** (case studies, podcast episodes, team, events, ...)
632. **How is it organized?** (categories, tags, custom taxonomies — e.g. case studies organized by industry + service-type)
643. **What fields does each entry need?** (e.g. case study: client name, hero image, deliverables, outcomes, before/after metrics, related case studies)
65
66If the user can't articulate the fields, propose a default set based on the content type. Default sets:
67
68- **Case studies:** client name, industry (taxonomy), service-type (taxonomy), hero image, brief, deliverables, outcomes, key metrics (3-5), client logo, related case studies (relationship)
69- **Team members:** name, role, bio, headshot, social links (LinkedIn / X / personal site), department (taxonomy)
70- **Events:** title, date/time, location, address, virtual/in-person, registration URL, capacity, hero image
71- **Podcast episodes:** title, episode number, season (taxonomy), audio file URL, duration, show notes, guest name, guest links
72- **Properties (real estate):** address, price, bedrooms, bathrooms, sqm, status (taxonomy: for-sale / sold / under-offer), gallery, neighborhood (taxonomy)
73- **Recipes:** title, prep time, cook time, servings, ingredients (repeater), steps (repeater), category (taxonomy), cuisine (taxonomy), difficulty, dietary tags
74
75### Step 3 — Design the CPT shape
76
77Output the proposed shape for user review:
78
79```markdown
80## Proposed CPT: `case_study`
81
82- **Singular label:** Case Study
83- **Plural label:** Case Studies
84- **Menu icon:** dashicons-portfolio
85- **Public:** yes
86- **Has archive:** yes (URL: /case-studies/)
87- **Supports:** title, editor, thumbnail, excerpt, revisions
88- **REST API:** exposed (so the builder + Respira can read/write)
89- **Hierarchical:** no
90- **Show in admin menu:** yes, position 25 (under Pages)
91
92## Supporting taxonomies
93
941. `case_study_industry` — Industries (e.g. SaaS, e-commerce, healthcare)
952. `case_study_service` — Service types (e.g. branding, website, copywriting)
96
97## ACF field group: `Case Study Fields`
98
99- Hero image (image, required)
100- Client name (text, required)
101- Brief (textarea)
102- Deliverables (repeater — title + description)
103- Outcomes (repeater — metric name + before + after)
104- Client logo (image)
105- Related case studies (relationship → case_study)
106```
107
108Wait for confirmation. The user might want to add or remove fields.
109
110### Step 4 — Create the CPT + taxonomies
111
112After confirmation, run the create calls:
113
1141. `respira_create_post_type` — creates the CPT with the proposed shape
1152. `respira_create_taxonomy` — once per supporting taxonomy, bound to the CPT
1163. `respira_create_acf_field_group` — the ACF field group, bound to the CPT via location rules
117
118Each call should report back: "✓ Created CPT `case_study`" / "✓ Created taxonomy `case_study_industry`" / "✓ Created ACF field group with 8 fields bound to `case_study`."
119
120### Step 5 — Generate sample entries
121
122Create 1–2 sample entries so the user can immediately see the CPT working in the admin and the editor renders correctly. Use `respira_create_custom_post` with realistic but generic content (no real customer names — generic personas like "BrandQ" or "agency-A").
123
124The sample entries should populate every ACF field so the user can see the full shape.
125
126### Step 6 — Suggest a builder-specific single template
127
128Based on the active builder, suggest where to create the single template:
129
130- **Bricks:** "Create a single template at Templates → Add New → Type: Single → Conditions: Post Type = case_study. Suggested elements: ..."
131- **Elementor:** "Create a single template at Templates → Theme Builder → Single → Add Conditions → Posts: case_study. Suggested widgets: ..."
132- **Divi:** "Create a Theme Builder template at Divi → Theme Builder → Add Template → Posts: case_study. Suggested modules: ..."
133- **Gutenberg / FSE theme:** "Create a single-case_study.html template in the theme or via Appearance → Editor → Templates → Add → Single Item: Case Study."
134- **Oxygen / Breakdance:** "Create a Single template targeting case_study."
135
136If the user wants to scaffold the template now, offer to build it: that's a separate skill flow (use `respira_build_page` against the single template surface for the chosen builder).
137
138### Step 7 — Verify
139
140Output a summary with:
141
142- The CPT slug + admin URL (`/wp-admin/edit.php?post_type=case_study`)
143- The archive URL on the front-end (`/case-studies/`)
144- The 2 sample entry URLs
145- A note about whether the single template was scaffolded or left for the user
146
147---
148
149## Hard rules
150
151- Always ask before creating. The CPT shape preview in Step 3 is mandatory. Customers will be writing into this CPT for years — get it right the first time.
152- Use snake_case slugs (`case_study`, `case_study_industry`) — never spaces or hyphens. WordPress CPT slugs have a 20-character hard limit.
153- Always expose `show_in_rest` so the builder + Respira can read/write the CPT. If `show_in_rest` is false, the post type is invisible to the REST API and most modern builders break on it.
154- Never name a CPT `post`, `page`, `attachment`, `revision`, `nav_menu_item`, `custom_css`, `customize_changeset`, `oembed_cache`, `user_request`, `wp_block`, `wp_template`, `wp_template_part`, `wp_global_styles`, `wp_navigation` — these are reserved.
155- ACF field group location rules must bind to the CPT (`post_type == case_study`), not to a category or template. Wrong location rule = fields invisible in the admin.
156- Sample entries use generic personas. Never use real customer names from memory or any other source.
157
158---
159
160## Telemetry
161
162Records: site URL hash, CPT slug created, taxonomy count, ACF field count, builder active, sample entries created, success/failure. No CPT names, no field values, no content sent.
163
164Endpoint: `POST https://www.respira.press/api/skills/track-usage`