Skip to content
Building Sites

Build a Content Site with Custom Post Types

Model custom post types, taxonomies, and fields, then build archives and single templates.

For a site built around structured content, a directory, a portfolio, or a knowledge base, your AI models the content first, then builds the templates that display it. You describe the content in plain English. Your AI decides how to store it, registers it on one surface, and wires the archive and single templates to your design system.

What you need first

Beyond the usual basics (an active license, MCP connected and set to Read + Write, one base builder chosen, and a design system that is ready), a content site needs a content-model engine and a way to render dynamic content.

  • A content-model engine: JetEngine is the primary path, ACF or ACF Pro is the fallback.
  • To render dynamic content in Elementor: JetEngine (Listing Grid and dynamic-field widgets) or Elementor Pro (Dynamic Tags). On the BuildPress Builder, JetEngine handles the dynamic rendering.

Step 1: Confirm the content model

Before writing anything, your AI decides how each piece of content should be stored. It separates pages from custom post types from taxonomies from options. Getting this right up front is what keeps the site clean later.

  • One-of-many items (every property, every project, every doc) are custom post types.
  • Named URL screens (a Home page, an About page, a Contact page) are pages.
  • Groupings (a category, a region, a type) are taxonomies.
  • Page content is never stored in an options page. Options hold site-wide settings, not the body of a screen.

Step 2: Register the post type on one surface

Your AI registers the post type on exactly one surface, JetEngine or ACF or WordPress core, then flushes permalinks so the archive does not 404. It sets a semantic menu icon and sane defaults for supports, public, show_in_rest, and rewrite.

  1. 1

    Pick the surface

    JetEngine is the primary path. ACF or ACF Pro is the fallback. WordPress core is an option when you do not need an extra engine. Whichever you choose, the post type lives on that surface only.

  2. 2

    Register and configure

    Your AI sets supports, public, show_in_rest, rewrite, and a menu icon, then reads the result back to confirm the registration took.

  3. 3

    Flush permalinks

    After registering, your AI flushes rewrite rules. Without this the new archive URL returns a 404 until permalinks are saved.

One surface per post type

Register each post type on only one surface (JetEngine or ACF or WordPress core), never two. Registering the same post type on two surfaces causes conflicts: duplicate registrations, fields that do not bind, and archives that behave unpredictably. Your AI keeps each post type on a single surface for this reason.

Step 3: Add taxonomies and custom fields

Your AI attaches taxonomies and fields after the post type exists. Taxonomies are hierarchical only when a tree actually makes sense. Fields go in a JetEngine meta box or a single ACF field group. Repeating fields (a gallery, a list of features) need ACF Pro, and your AI includes their subfields so the repeater is not empty.

Step 4: Build the archive and single templates

With the model in place, your AI builds the templates that display it. The path depends on which renderer you use, but both end in templates bound to your design system.

  1. JetEngine path: build the query, then a listing, then a Listing Grid that places the listing and configures its dynamic fields. Your AI verifies the listing yields results, not just an HTTP 200.
  2. Elementor Pro path: build the loop in templates and bind values with Dynamic Tags.
  3. Either way, single templates still use widget-first composition. Dynamic values bind through tags, never typed-in macros or hardcoded text.
Coming soon
A filterable archive grid: a custom post type listing shown as a multi-column grid of cards, with taxonomy filters along the top.
Coming soon
A single-item template: one custom post type entry rendered with its title, featured image, and custom fields bound through dynamic tags.

Example prompts

Paste one of these to your AI to kick off a build. Each models the content, then builds the archive and single templates.

A business directory

Prompttext
Create a business directory. Each listing is a 'place' with name, address, category, phone, website, hours, and a logo. Group them by a 'place_category' taxonomy, then build an archive page with a filterable grid and a single-listing template.

A portfolio

Prompttext
Set up a 'project' post type with client, year, role, and a gallery field, grouped by 'project_type'. Build a portfolio grid on the Work page and a single-project layout.

A docs or knowledge base

Prompttext
Make a 'doc' post type with a category taxonomy, build a docs archive grouped by category, and a single-article template with a sidebar of related docs.

Verify before you publish

Your AI renders the archive and checks the live page, not just the tool call. It confirms the listing returns items, the dynamic fields resolved, and no PHP notices appear in the body. Pages stay drafts until you confirm. Ask your AI to publish when the templates look right.

Coming soon
A walkthrough: modeling a 'place' post type with a taxonomy and fields, then building the filterable archive and single template end to end.
Share