Content Model
Complete reference for every custom post type, meta field, and WordPress option exposed to the Next.js frontend.
Custom post types
All public CPTs appear under the Headless Core admin menu and are exposed via WPGraphQL.
Posts (WordPress core)
| Field | GraphQL | Notes |
|---|---|---|
| title, content, excerpt | Post |
Standard blog content |
| slug | slug |
URL: /blog/{slug} |
| categories | categories.nodes |
Used for blog filters |
| featuredImage | featuredImage.node.sourceUrl |
Cover image |
| author | author.node |
Name + avatar |
Pages (WordPress core)
| Field | GraphQL | Notes |
|---|---|---|
| title, content | Page |
Rendered via [...slug] catch-all |
| uri | nodeByUri |
Any path, e.g. /about |
service — Corporate Services
| Admin label | Corporate Services |
| GraphQL single | service |
| GraphQL plural | services |
| Used by | Corporate, Business, Landing |
| Meta key | GraphQL field | Type | Example |
|---|---|---|---|
headlesscore_icon |
iconName |
String | Code, Sparkles, TrendingUp, Layout |
portfolio_item — Case Studies
| Admin label | Corporate Case Studies |
| GraphQL single | portfolioItem |
| GraphQL plural | portfolioItems |
| Used by | Corporate |
| Meta key | GraphQL field | Type | Example |
|---|---|---|---|
headlesscore_category |
itemCategory |
String | Financial Technology |
Supports featured image for case study thumbnails.
project — Portfolio Projects
| Admin label | Portfolio Projects |
| GraphQL single | project |
| GraphQL plural | projects |
| Used by | Portfolio |
| Meta key | GraphQL field | Type | Example |
|---|---|---|---|
headlesscore_category |
projectCategory |
String | Web Application |
headlesscore_tags |
projectTags |
String | Next.js, GraphQL, Tailwind (comma-separated) |
headlesscore_github_url |
githubUrl |
String | https://github.com/... |
headlesscore_live_url |
liveUrl |
String | https://demo.example.com |
testimonial — Business Testimonials
| Admin label | Business Testimonials |
| GraphQL single | testimonial |
| GraphQL plural | testimonials |
| Used by | Business |
| Field | Usage |
|---|---|
| Title | Customer name |
| Content | Quote text |
headlesscore_author_role → authorRole |
Job title |
headlesscore_author_company → authorCompany |
Company name |
headlesscore_rating → rating |
1–5 stars |
headless_product — Shop Products
| Admin label | Shop Products |
| GraphQL single | headlessProduct |
| GraphQL plural | headlessProducts |
| Used by | Shop |
| Meta key | GraphQL field | Type | Example |
|---|---|---|---|
headlesscore_product_price |
productPrice |
String | 99.00 |
headlesscore_product_sale_price |
productSalePrice |
String | 79.00 |
headlesscore_product_sku |
productSku |
String | HC-PRO |
headlesscore_product_category |
productCategory |
String | Software |
headlesscore_product_in_stock |
productInStock |
String | 1 or 0 |
WooCommerce: If WPGraphQL for WooCommerce is installed,
getShopProducts()in Next.js can also query native WooCommerceproducts. The shop page triesheadlessProductsfirst, then falls back to WooCommerce, then mock data.
team_member — Team Members
| GraphQL single | teamMember |
| GraphQL plural | teamMembers |
| Used by | Corporate |
lms_course — LMS Online Courses
| Admin label | Courses (LMS) |
| GraphQL single | course |
| GraphQL plural | courses |
| Taxonomy | course_category -> courseCategories |
| Used by | LMS, Education, Full-Site Suite |
| Meta key | GraphQL field | Type | Example |
|---|---|---|---|
instructor_name |
instructorName |
String | Alex Rivera |
course_duration |
courseDuration |
String | 14 Hours |
total_lessons |
totalLessons |
Int | 28 |
kb_article — Knowledge Base & Wiki Articles
| Admin label | Knowledge Base |
| GraphQL single | kbArticle |
| GraphQL plural | kbArticles |
| Taxonomy | kb_category -> kbCategories |
| Used by | Help Center, Docs, Wiki |
| GraphQL Mutation | Description |
|---|---|
voteKbArticle(input: {articleId: ID!, isHelpful: Boolean!}) |
Increments helpfulVotes or unhelpfulVotes and returns updated vote counts. |
⚡ 52 Gutenberg Pro Blocks Suite
Verified directly against register_block_type() calls across
inc/pro-blocks*.php — this is the complete, actual list, not a
rounded/marketing figure.
| Block Slug | Category | Key Purpose |
|---|---|---|
headlesscore/hero-banner |
Content & Layout | Full-width hero section |
headlesscore/feature-grid |
Content & Layout | Icon + text feature grid |
headlesscore/steps |
Content & Layout | Numbered process/steps list |
headlesscore/callout |
Content & Layout | Highlighted callout box |
headlesscore/icon-list |
Content & Layout | Icon-prefixed bullet list |
headlesscore/icon-box |
Content & Layout | Icon + heading + text card |
headlesscore/divider |
Content & Layout | Section divider rule |
headlesscore/spacer |
Content & Layout | Vertical spacing control |
headlesscore/bento-grid |
Content & Layout | Asymmetric bento-style grid |
headlesscore/table-of-contents |
Content & Layout | Auto-generated page ToC |
headlesscore/quote-block |
Content & Layout | Styled pull quote |
headlesscore/button-group |
Content & Layout | Grouped CTA buttons |
headlesscore/magazine-category-grid |
Content & Layout | Editorial category grid |
headlesscore/posts-grid |
Content & Layout | Manually curated post grid |
headlesscore/recent-posts |
Content & Layout | Auto-updating recent posts list |
headlesscore/blog-archive |
Content & Layout | Full blog archive listing |
headlesscore/cta-banner |
Marketing & Conversion | Hero call-to-action banner |
headlesscore/split-cta |
Marketing & Conversion | Two-column CTA layout |
headlesscore/pricing-table |
Marketing & Conversion | Multi-plan pricing grid |
headlesscore/pricing-toggle |
Marketing & Conversion | Monthly/annual pricing toggle |
headlesscore/countdown-timer |
Marketing & Conversion | Real-time event countdown |
headlesscore/newsletter-signup |
Marketing & Conversion | Newsletter signup form (wired) |
headlesscore/popup |
Marketing & Conversion | Triggered popup/modal |
headlesscore/alert-banner |
Marketing & Conversion | Dismissible site-wide alert |
headlesscore/badge-row |
Marketing & Conversion | Trust/badge row |
headlesscore/testimonial-slider |
Social Proof | Customer testimonial carousel |
headlesscore/team-grid |
Social Proof | Team member avatar grid |
headlesscore/team-slider |
Social Proof | Team members as a scroll-snap slider |
headlesscore/stats-counter |
Social Proof | Animated statistics counter |
headlesscore/logo-cloud |
Social Proof | Partner/client logo showcase |
headlesscore/logo-marquee |
Social Proof | Scrolling logo marquee |
headlesscore/star-rating |
Social Proof | Star rating display |
headlesscore/author-box |
Social Proof | Post author bio box |
headlesscore/before-after |
Social Proof | Before/after image slider |
headlesscore/tabs |
Interactive & Forms | Tabbed content container |
headlesscore/faq-accordion |
Interactive & Forms | Expandable FAQ accordion |
headlesscore/contact-form |
Interactive & Forms | Contact form (wired) |
headlesscore/comparison-table |
Interactive & Forms | Feature comparison table |
headlesscore/flip-cards |
Interactive & Forms | Hover-to-flip card grid |
headlesscore/progress-bar |
Interactive & Forms | Animated progress bar |
headlesscore/scrolling-text |
Interactive & Forms | Continuous scrolling text banner |
headlesscore/map-embed |
Interactive & Forms | Embedded map |
headlesscore/roi-calculator |
Interactive & Forms | Team-size pricing/savings calculator |
headlesscore/code-highlighter |
Interactive & Forms | Code block with copy-to-clipboard |
headlesscore/image-gallery |
Media | Responsive image gallery |
headlesscore/video-embed |
Media | YouTube facade (privacy mode) / Vimeo embed |
headlesscore/photo-album |
Media | Captioned photo grid with CSS lightbox |
headlesscore/image-compare |
Media | Before/after image comparison slider |
headlesscore/image-hotspots |
Media | Image with clickable labeled hotspot pins |
headlesscore/audio-player |
Media | Titled audio/podcast player |
headlesscore/social-share |
Utility | Social share buttons |
headlesscore/timeline |
Utility | Vertical timeline |
Not Gutenberg blocks (real features, different mechanism): the LMS
(lms_course) and Knowledge Base (kb_article) modules are real custom
post types with their own Next.js page templates — they render through
dedicated frontend components, not through the block editor, so they
don't appear in the block count above.
| Field | Usage |
|---|---|
| Title | Person name |
| Content | Bio text |
| Featured image | Avatar photo |
headlesscore_member_role → memberRole |
Job title |
faq — Frequently Asked Questions
| GraphQL single | faq |
| GraphQL plural | faqs |
| Used by | Corporate, Landing |
| Field | Usage |
|---|---|
| Title | Question |
| Content | Answer |
pricing_plan — Pricing Plans
| GraphQL single | pricingPlan |
| GraphQL plural | pricingPlans |
| Used by | Corporate, Landing |
| Meta key | GraphQL field | Type | Example |
|---|---|---|---|
headlesscore_plan_price |
planPrice |
String | 99 |
headlesscore_plan_period |
planPeriod |
String | month, year, forever |
headlesscore_plan_features |
planFeatures |
String | One feature per line |
headlesscore_plan_highlighted |
planHighlighted |
String | 1 = highlighted card |
headlesscore_plan_cta_label |
planCtaLabel |
String | Get Started |
headlesscore_plan_cta_url |
planCtaUrl |
String | #contact |
contact_log — Contact Submissions (admin only)
Not exposed via GraphQL. Created by the submitContactForm mutation. Private post type visible only in wp-admin.
Theme settings (GraphQL: themeSettings)
All options are managed in Headless Core → Settings and exposed as a single themeSettings query.
General
| WP option | GraphQL field | Description |
|---|---|---|
headlesscore_enable_headless |
enableHeadlessMode |
Redirect WP frontend to Next.js |
headlesscore_nextjs_url |
headlessRedirectUrl |
Next.js base URL |
headlesscore_logo_url |
logoUrl |
Header logo image URL |
headlesscore_copyright_text |
copyrightText |
Footer copyright |
headlesscore_home_layout |
homeLayout |
Site mode (see Site Modes) |
headlesscore_primary_color |
primaryColor |
CSS --primary |
headlesscore_accent_color |
accentColor |
CSS --accent |
Social links
| WP option | GraphQL field |
|---|---|
headlesscore_facebook_url |
socialLinks.facebook |
headlesscore_twitter_url |
socialLinks.twitter |
headlesscore_instagram_url |
socialLinks.instagram |
headlesscore_linkedin_url |
socialLinks.linkedin |
headlesscore_github_url |
socialLinks.github |
SEO & analytics
| WP option | GraphQL field |
|---|---|
headlesscore_seo_description |
seoDescription |
headlesscore_default_share_image |
defaultShareImage |
headlesscore_google_analytics_id |
googleAnalyticsId |
Appearance
| WP option | GraphQL field | Values |
|---|---|---|
headlesscore_header_style |
headerStyle |
glass, dark, light |
headlesscore_footer_style |
footerStyle |
glass, dark, light |
headlesscore_maintenance_mode |
maintenanceMode |
0 / 1 |
headlesscore_default_theme_mode |
defaultThemeMode |
dark, light, system |
headlesscore_logo_text_size |
logoTextSize |
Tailwind class |
headlesscore_logo_text_weight |
logoTextWeight |
Tailwind class |
Site profile (themeSettings.siteProfile)
| WP option | GraphQL field |
|---|---|
headlesscore_site_tagline |
tagline |
headlesscore_hero_title |
heroTitle |
headlesscore_hero_highlight |
heroHighlight |
headlesscore_hero_subtitle |
heroSubtitle |
headlesscore_hero_cta_label |
heroCtaLabel |
headlesscore_hero_cta_url |
heroCtaUrl |
headlesscore_contact_email |
contactEmail |
headlesscore_contact_phone |
contactPhone |
headlesscore_portfolio_bio |
portfolioBio |
headlesscore_portfolio_avatar |
portfolioAvatar |
Portfolio JSON fields
| WP option | GraphQL field | Format |
|---|---|---|
headlesscore_portfolio_skills |
portfolioSkills |
[{"category":"Frontend","items":["React","Next.js"]}] |
headlesscore_portfolio_timeline |
portfolioTimeline |
[{"year":"2024","role":"Engineer","company":"Agency","description":"..."}] |
Navigation
themeSettings.navigationMenu resolves the WordPress menu assigned to Primary Navigation location:
[
{ "label": "Blog", "url": "/blog", "path": "/blog" }
]
Licensing
| WP option | GraphQL field |
|---|---|
headlesscore_license_key |
license.valid, license.tier, etc. |
See Licensing.
Pro Gutenberg blocks
Twenty-two license-gated blocks live under the HeadlessCore block category in the Gutenberg editor. Insertion requires a valid pro license; rendering does not — content built with these blocks keeps displaying even if the license later lapses.
Server-side rendering happens in inc/pro-blocks.php (render_callback); the editor UI is in assets/blocks/pro-blocks.js. On the Next.js side, BlockRenderer passes the pre-styled HTML through unchanged.
| Block name | Block ID | Attributes (JSON) |
|---|---|---|
| CTA Banner | headlesscore/cta-banner |
heading, text, buttonLabel, buttonUrl |
| Pricing Table | headlesscore/pricing-table |
plansJson — [{title, price, period, features[], highlighted, ctaLabel, ctaUrl}] |
| FAQ Accordion | headlesscore/faq-accordion |
itemsJson — [{question, answer}] |
| Testimonial Slider | headlesscore/testimonial-slider |
testimonialsJson — [{quote, author, role, company, avatarUrl}] |
| Team Grid | headlesscore/team-grid |
membersJson — [{name, role, photoUrl, bio}] |
| Stats Counter | headlesscore/stats-counter |
statsJson — [{value, label}] |
| Logo Cloud | headlesscore/logo-cloud |
logosJson — [{imageUrl, name, url}] |
| Tabs | headlesscore/tabs |
tabsJson — [{label, content}] |
| Countdown Timer | headlesscore/countdown-timer |
targetDate, heading |
| Newsletter Signup | headlesscore/newsletter-signup |
heading, placeholder, buttonLabel |
| Contact Form | headlesscore/contact-form |
heading, submitLabel |
| Image Gallery | headlesscore/image-gallery |
imagesJson — [{url, alt}] |
| Video Embed | headlesscore/video-embed |
videoUrl, posterUrl, caption |
| Comparison Table | headlesscore/comparison-table |
comparisonJson — {columns, rows: [{feature, values}]} |
| Team Slider | headlesscore/team-slider |
membersJson — [{name, role, photoUrl, bio}] |
| Photo Album | headlesscore/photo-album |
albumTitle, imagesJson — [{url, caption}] |
| Feature Grid | headlesscore/feature-grid |
featuresJson — [{icon, title, description}] |
| Hero Banner | headlesscore/hero-banner |
heading, subheading, ctaLabel, ctaUrl, imageUrl |
| Steps | headlesscore/steps |
heading, stepsJson — [{title, description}] |
| Callout | headlesscore/callout |
variant (info/success/warning/error), title, message |
| Icon List | headlesscore/icon-list |
itemsJson — ["item", ...] |
| Magazine Category Grid | headlesscore/magazine-category-grid |
heading, source (auto/manual), maxCategories, postsPerCategory, layout (magazine/grid), showExcerpt, categoriesJson — [{slug, name, postCount}] |
Use these on any WordPress page rendered via [...slug] / wp_page mode. See Licensing for activation.
Revalidation path mapping
When content is saved, WordPress sends a revalidation webhook with this path:
| Post type | Path revalidated |
|---|---|
post |
/blog/{slug} |
page |
/{slug} |
service, portfolio_item |
/corporate |
project |
/portfolio |
testimonial |
/business |
headless_product |
/shop |
team_member, faq, pricing_plan |
/corporate |
| Theme settings | / (full layout) |