LaunchPad creates standard WordPress pages and posts during recipe deployment, but many projects require specialized content types—portfolio projects, team member profiles, product catalogs, testimonials, case studies. These aren’t standard pages or blog posts; they’re structured data needing custom fields, taxonomies, and templates. Extending LaunchPad with custom post types unlocks these advanced content structures.

WordPress custom post types power sophisticated websites beyond blogs and brochure sites. According to WordPress development surveys, 73% of complex WordPress sites use custom post types for specialized content. LaunchPad custom post types integration requires understanding both WordPress CPT APIs and LaunchPad’s extensibility hooks.
This advanced developer guide reveals complete custom post type integration including registering custom post types in recipes, taxonomy implementation for organization, Advanced Custom Fields integration, LaunchPad theme template hierarchy, WooCommerce e-commerce integration, and portfolio and directory site patterns. Master these techniques and you’ll build sophisticated websites extending far beyond LaunchPad’s default capabilities.
Understanding Custom Post Types
Before integrating with LaunchPad, understand WordPress custom post type fundamentals.
What Are Custom Post Types
WordPress includes default post types: posts (blog articles), pages (static content), attachments (media), revisions (content history).
Custom post types add specialized content: portfolios (design work, case studies), testimonials (client reviews with structured fields), team members (staff profiles with contact info), products (e-commerce items), events (calendar listings), properties (real estate listings).
Each custom post type operates like posts/pages but with specific fields, taxonomies, and templates.
When to Use Custom Post Types
Use CPTs for content that: repeats with consistent structure (all team members have name, title, bio, photo), needs special organization (taxonomies like project-type, skill), requires custom fields (testimonial author, company, rating), displays differently than posts/pages (portfolio grid vs. blog list).
Don’t create CPTs for: one-time unique content (use pages), simple lists (use posts with categories), data better suited for plugins (forms, bookings).
Custom Post Types in LaunchPad Context
LaunchPad recipes can: include CPT registration code, create sample CPT content, configure CPT taxonomies, set up CPT templates in theme.
Integration requires both PHP (registration) and theme support (templates).
Registering Custom Post Types for LaunchPad
Multiple approaches exist for LaunchPad custom post types registration.
Plugin-Based Registration (Recommended)
Best practice: create dedicated plugin for CPT registration. This separates functionality from theme, surviving theme changes.
Example plugin structure:
<?php
/**
* Plugin Name: LaunchPad Custom Post Types
* Description: Adds Portfolio, Testimonials, and Team CPTs
* Version: 1.0.0
*/
// Register Portfolio CPT
function launchpad_register_portfolio() {
$args = array(
'public' => true,
'label' => 'Portfolio',
'labels' => array(
'name' => 'Portfolio',
'singular_name' => 'Portfolio Item',
'add_new_item' => 'Add New Project'
),
'supports' => array('title', 'editor', 'thumbnail', 'excerpt'),
'has_archive' => true,
'rewrite' => array('slug' => 'portfolio'),
'show_in_rest' => true,
'menu_icon' => 'dashicons-portfolio'
);
register_post_type('portfolio', $args);
}
add_action('init', 'launchpad_register_portfolio');
Recipe-Triggered Registration
Alternative: trigger CPT registration only when specific recipe is used:
add_action('launchpad_after_recipe_build', 'activate_portfolio_cpt', 10, 2);
function activate_portfolio_cpt($recipe_slug, $branding_data) {
if ($recipe_slug === 'portfolio') {
// Activate CPT plugin or register CPT
launchpad_register_portfolio();
flush_rewrite_rules(); // Important!
}
}
This activates LaunchPad custom post types only for recipes needing them.
Functions.php Registration (Not Recommended)
Possible but problematic:
// In theme functions.php
add_action('init', 'theme_register_cpt');
Problem: Switching themes loses CPT registration, breaking content access. Always use plugin approach.
Taxonomy Implementation
Custom post types often need custom taxonomies for organization.
Creating Custom Taxonomies
Portfolio needs project categories and skills taxonomies:
function launchpad_register_portfolio_taxonomies() {
// Project Categories
register_taxonomy('project-category', 'portfolio', array(
'hierarchical' => true,
'label' => 'Project Categories',
'show_in_rest' => true,
'rewrite' => array('slug' => 'project-category')
));
// Skills
register_taxonomy('skill', 'portfolio', array(
'hierarchical' => false, // Like tags
'label' => 'Skills',
'show_in_rest' => true,
'rewrite' => array('slug' => 'skill')
));
}
add_action('init', 'launchpad_register_portfolio_taxonomies');
Hierarchical taxonomies work like categories (parent/child). Non-hierarchical work like tags.
Taxonomy Integration with LaunchPad
Create default taxonomy terms during recipe build:
add_action('launchpad_after_recipe_build', 'create_portfolio_terms', 10, 2);
function create_portfolio_terms($recipe_slug, $branding_data) {
if ($recipe_slug === 'portfolio') {
$categories = ['Web Design', 'Brand Identity', 'UI/UX', 'Development'];
foreach ($categories as $category) {
if (!term_exists($category, 'project-category')) {
wp_insert_term($category, 'project-category');
}
}
$skills = ['Photoshop', 'Illustrator', 'WordPress', 'React'];
foreach ($skills as $skill) {
if (!term_exists($skill, 'skill')) {
wp_insert_term($skill, 'skill');
}
}
}
}
Users get pre-populated taxonomies, ready to use.
Advanced Custom Fields Integration
Custom fields add structured data to LaunchPad custom post types.
ACF Plugin Configuration
Advanced Custom Fields (ACF) provides GUI for custom field management. Better than manual meta box coding for most use cases.
Example: Testimonial CPT with ACF fields:
// Register Testimonial CPT
function launchpad_register_testimonials() {
register_post_type('testimonial', array(
'public' => true,
'label' => 'Testimonials',
'supports' => array('title', 'editor', 'thumbnail'),
'menu_icon' => 'dashicons-format-quote'
));
}
add_action('init', 'launchpad_register_testimonials');
Then configure ACF field group (via UI or code): Client Name (text), Company (text), Position (text), Website (URL), Rating (number 1-5), Featured (true/false).
Programmatic ACF Field Registration
For LaunchPad custom post types recipes, register ACF fields programmatically:
add_action('acf/init', 'launchpad_register_testimonial_fields');
function launchpad_register_testimonial_fields() {
acf_add_local_field_group(array(
'key' => 'group_testimonial',
'title' => 'Testimonial Details',
'fields' => array(
array(
'key' => 'field_client_name',
'label' => 'Client Name',
'name' => 'client_name',
'type' => 'text',
'required' => 1,
),
array(
'key' => 'field_company',
'label' => 'Company',
'name' => 'company',
'type' => 'text',
),
array(
'key' => 'field_rating',
'label' => 'Rating',
'name' => 'rating',
'type' => 'number',
'min' => 1,
'max' => 5,
),
),
'location' => array(
array(
array(
'param' => 'post_type',
'operator' => '==',
'value' => 'testimonial',
),
),
),
));
}
Fields appear automatically when editing testimonials.
Displaying ACF Data in Templates
Access ACF fields in templates:
// In single-testimonial.php or archive
$client_name = get_field('client_name');
$company = get_field('company');
$rating = get_field('rating');
echo '<h2>' . esc_html($client_name) . '</h2>';
echo '<p>' . esc_html($company) . '</p>';
echo '<div class="rating">' . str_repeat('⭐', $rating) . '</div>';
Theme Template Hierarchy
WordPress uses template hierarchy for displaying custom post types. LaunchPad Bundle theme should support common CPT templates.
Required Template Files
For portfolio CPT, create: archive-portfolio.php (portfolio listing page), single-portfolio.php (individual project page), taxonomy-project-category.php (category archive), taxonomy-skill.php (skill archive).
Template Example: Portfolio Archive
<?php
/**
* Template: archive-portfolio.php
* Portfolio Archive Page
*/
get_header(); ?>
<div class="portfolio-archive">
<h1><?php post_type_archive_title(); ?></h1>
<div class="portfolio-grid">
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<article class="portfolio-item">
<?php if (has_post_thumbnail()) : ?>
<a href="<?php the_permalink(); ?>">
<?php the_post_thumbnail('medium'); ?>
</a>
<?php endif; ?>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<?php
$categories = get_the_terms(get_the_ID(), 'project-category');
if ($categories) :
echo '<div class="project-categories">';
foreach ($categories as $category) {
echo '<span>' . esc_html($category->name) . '</span> ';
}
echo '</div>';
endif;
?>
<?php the_excerpt(); ?>
</article>
<?php endwhile; endif; ?>
</div>
<?php the_posts_pagination(); ?>
</div>
<?php get_footer(); ?>
LaunchPad Theme Integration
Ensure LaunchPad Bundle theme includes CPT templates or document how users add them via child theme.
WooCommerce Integration
E-commerce recipes need WooCommerce, WordPress’s most popular shop plugin.
Including WooCommerce in Recipes
Add WooCommerce to recipe plugins array:
"plugins": ["woocommerce", "wordpress-seo", "contact-form-7"]
LaunchPad installs and activates WooCommerce.
Post-Installation WooCommerce Setup
WooCommerce requires setup wizard. Automate via LaunchPad hooks:
add_action('launchpad_after_recipe_build', 'setup_woocommerce', 10, 2);
function setup_woocommerce($recipe_slug, $branding_data) {
if ($recipe_slug === 'ecommerce') {
// Mark WooCommerce setup as complete
update_option('woocommerce_onboarding_profile', array(
'completed' => true
));
// Set default currency
update_option('woocommerce_currency', 'USD');
// Create default pages if they don't exist
WC_Install::create_pages();
// Configure payment methods
// Configure shipping methods
// Set tax settings
}
}
Product Import
Create sample products for e-commerce recipes:
function launchpad_create_sample_products() {
$sample_products = array(
array(
'title' => 'Sample Product 1',
'description' => 'This is a sample product',
'price' => '29.99',
'sku' => 'SAMPLE-001'
),
// More products...
);
foreach ($sample_products as $product_data) {
$product = new WC_Product_Simple();
$product->set_name($product_data['title']);
$product->set_description($product_data['description']);
$product->set_regular_price($product_data['price']);
$product->set_sku($product_data['sku']);
$product->save();
}
}
Portfolio and Directory Site Patterns
Common use cases for LaunchPad custom post types.
Portfolio Site Implementation
Full portfolio site needs: portfolio CPT with project categories and skills, single project template with galleries, filterable portfolio grid, case study layout, client testimonials integration.
Package as complete solution in custom recipe.
Directory Site Implementation
Directory (business listings, member directory, resource database) needs: directory CPT (listings), location taxonomy (geographic organization), category taxonomy (listing types), custom fields (address, phone, website, hours), search and filtering, Google Maps integration.
More complex than portfolio but follows same patterns.
Key Takeaways
- LaunchPad custom post types should be registered via dedicated plugin (not theme functions.php) to survive theme changes and maintain content access
- Integrate CPTs with recipes using
launchpad_after_recipe_buildhook to register post types, taxonomies, and create default terms programmatically - Advanced Custom Fields (ACF) provides GUI-based custom field management; register fields programmatically for recipe deployments ensuring consistent structure
Extend LaunchPad for Advanced Content
You’ve learned comprehensive techniques for integrating LaunchPad custom post types covering CPT registration, taxonomy implementation, ACF integration, template development, and WooCommerce e-commerce. These techniques enable sophisticated websites far beyond standard blogs and brochure sites.
Whether building portfolios, directories, e-commerce stores, or specialized content platforms, custom post types integrated with LaunchPad provide scalable, maintainable solutions.
Ready to build advanced LaunchPad integrations? Study the WordPress Custom Post Type documentation and experiment with recipe extensions. For Pro features supporting advanced content types, explore LaunchPad Pro.

