Een WordPress custom post type (CPT) is een inhoudstype naast de vijf ingebouwde (post, page, attachment, revision, nav_menu_item). CPTs slaan gestructureerde inhoud op zoals producten, evenementen, vastgoed, recepten, testimonials of portfolios, elk met een eigen beheermenu, edit scherm, taxonomieen, URL structuur en template hierarchie. Custom post types werden geintroduceerd in WordPress 2.9 (december 2009) en werden de standaardaanpak met register_post_type() in WordPress 3.0 (juni 2010). Een CPT wordt in PHP geregistreerd via register_post_type( $slug, $args ) op de init hook, of visueel via plugins zoals Custom Post Type UI (meer dan 700.000 actieve installaties), Pods (meer dan 100.000) en Meta Box (meer dan 400.000). Vanaf WordPress 5.0 (december 2018) kunnen CPTs de blokeditor inschakelen door show_in_rest op true te zetten, wat ze ook beschikbaar maakt op de REST API op /wp-json/wp/v2/<slug>. WooCommerce registreert het product CPT plus shop_order, shop_coupon, product_variation en tien meer. The Events Calendar gebruikt tribe_events. ACF Pro kan CPTs registreren via zijn UI sinds versie 6.1 (maart 2023). Custom post types blijven in 2025 de ruggengraat van elke WordPress site die niet enkel een blog is.
Wanneer een custom post type gebruiken?
- E commerce producten (WooCommerce).
- Evenementen (Events Calendar tribe_events).
- Vastgoed.
- Portfolios.
- Testimonials, teamleden, FAQs.
- Recepten met gestructureerde data.
- Vacatures.
Een custom post type registreren
add_action( 'init', 'mysite_register_product_cpt' );
function mysite_register_product_cpt() {
$args = array(
'labels' => array( 'name' => 'Producten', 'singular_name' => 'Product' ),
'public' => true,
'show_in_rest' => true,
'has_archive' => true,
'rewrite' => array( 'slug' => 'producten' ),
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' ),
'menu_icon' => 'dashicons-cart',
);
register_post_type( 'product', $args );
}Belangrijke argumenten
| Argument | Functie |
|---|---|
| public | Stelt show_ui, publicly_queryable, exclude_from_search standaard in. |
| show_in_rest | Verplicht voor blokeditor en REST API endpoint. |
| has_archive | Maakt een archief op /<slug>/. |
| supports | Actieve functies: title, editor, thumbnail, excerpt, custom-fields. |
| rewrite | URL slug. |
Plugin tegenover thema
Registreer CPTs altijd in een plugin, nooit in het thema. Anders verdwijnt het CPT uit het beheermenu bij themawissel en wordt de inhoud ontoegankelijk.
Template hierarchie
- Single: single-product.php, single.php, singular.php, index.php.
- Archive: archive-product.php, archive.php, index.php.
CPTs en REST API
Met show_in_rest => true is het CPT beschikbaar op /wp-json/wp/v2/<rest_base>. Headless frontends gebruiken dit endpoint.
Plugins die CPTs zonder code registreren
- Custom Post Type UI (meer dan 700.000 installaties).
- ACF Pro 6.1+ (registreert CPTs vanaf maart 2023).
- Pods Framework.
- Meta Box.
- Toolset Types.
Prestaties
- Alle CPT inhoud leeft in wp_posts. Prestaties identiek tot ~100.000 rijen.
- Registreer niet meer dan 20 tot 30 CPTs per site.
- Flush rewrite rules eenmaal bij plugin activatie.
- Honderdduizenden entries: overweeg eigen tabel (WooCommerce HPOS sinds 8.0 augustus 2023).
Veel voorkomende fouten
- Verkeerde hook. Gebruik init.
- show_in_rest vergeten.
- Rewrite rules niet geflushd.
- Registratie in het thema.
- Slug botsing met paginas.
Wat InspectWP controleert
InspectWP detecteert custom post types in de gerenderde HTML en doorzoekt REST API endpoints wanneer beschikbaar. Het rapport identificeert populaire CPT aanbieders (WooCommerce, Events Calendar, ACF).