Skip to content

WordPress custom post types: when and how to use them

Last updated: 31 December 2025

WordPress Custom Post Types: Uitleg en praktische voorbeelden

WordPress wordt vaak gezien als blogplatform, maar het kan veel meer. Custom Post Types (CPT's) transformeren WordPress tot een volledig Content Management Systeem. Met CPT's maak je elk type content: portfolio items, producten, evenementen, teamleden, testimonials en meer. Deze gids legt uit wat CPT's zijn en hoe je ze gebruikt.

Wat zijn Custom Post Types?

In WordPress is een "post type" een categorie content. Standaard heeft WordPress deze post types:

  • Posts: Blogberichten, chronologisch geordend
  • Pages: Statische pagina's zoals Over Ons of Contact
  • Attachments: Media bestanden
  • Revisions: Versies van content
  • Navigation Menus: Menu items

Custom Post Types zijn door jou gedefinieerde content types. Ze gedragen zich als Posts of Pages, maar met eigen naam en eigenschappen.

Why Custom Post Types gebruiken?

Stel je hebt een portfolio. Je zou portfolio items als blogposts kunnen plaatsen, maar dat heeft nadelen:

  • Portfolio items mengen met blogberichten
  • CategorieĆ«n en tags zijn gedeeld
  • Het archief toont alles door elkaar
  • Moeilijk om alleen portfolio te tonen

Met een Custom Post Type "Portfolio":

  • Portfolio items staan apart van blogs
  • Eigen categorieĆ«n en tags (taxonomieĆ«n)
  • Eigen archiefpagina op /portfolio/
  • Makkelijk te queryen en tonen

Voorbeelden van Custom Post Types

Populaire toepassingen:

Portfolio / Projecten

Voor designers, developers, fotografen. Toon werk met afbeeldingen, klant, datum en projectdetails.

Producten

WooCommerce maakt een "product" CPT. Ook zonder WooCommerce kun je een simpele productcatalogus maken.

Evenementen

Concerten, workshops, webinars. Met datum, locatie, prijs en aanmeldlink.

Testimonials / Reviews

Klantbeoordelingen met naam, foto, bedrijf en citaat.

Teamleden

Medewerkers met foto, functie, bio en contactgegevens.

FAQ's

Veelgestelde vragen georganiseerd per categorie.

Vacatures

Openstaande posities met functie-eisen, locatie en sollicitatielink.

Custom Post Types maken

Er zijn twee methoden: met een plugin of met code.

Methode 1: Plugin (aanbevolen voor beginners)

Custom Post Type UI is de populairste plugin:

  1. Installeer en activeer Custom Post Type UI
  2. Ga naar CPT UI > Voeg nieuw toe
  3. Vul de basis gegevens in:
    • Post Type Slug: portfolio (lowercase, geen spaties)
    • Meervoud label: Portfolio items
    • Enkelvoud label: Portfolio item
  4. Configureer instellingen:
    • Publiek: Ja
    • Heeft archief: Ja
    • Ondersteunt: Titel, Editor, Thumbnail, etc.
  5. Klik "Post Type toevoegen"

Je nieuwe post type verschijnt direct in het admin menu.

Methode 2: Code (voor developers)

Voeg toe aan functions.php of een site-specifieke plugin:

function registreer_portfolio_cpt() {
    $labels = array(
        'name'               => 'Portfolio',
        'singular_name'      => 'Portfolio item',
        'menu_name'          => 'Portfolio',
        'add_new'            => 'Nieuw item',
        'add_new_item'       => 'Nieuw portfolio item',
        'edit_item'          => 'Bewerk portfolio item',
        'view_item'          => 'Bekijk portfolio item',
        'all_items'          => 'Alle items',
        'search_items'       => 'Zoek items',
        'not_found'          => 'Geen items gevonden',
    );

    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'has_archive'        => true,
        'rewrite'            => array('slug' => 'portfolio'),
        'supports'           => array('title', 'editor', 'thumbnail', 'excerpt'),
        'menu_icon'          => 'dashicons-portfolio',
        'show_in_rest'       => true,
    );

    register_post_type('portfolio', $args);
}
[add_action](/kennisbank/wordpress-hooks-uitleg)('init', 'registreer_portfolio_cpt');

Belangrijke CPT instellingen

public: Maakt het post type zichtbaar in admin en frontend.

has_archive: Creƫert een archiefpagina op /slug/.

rewrite: Bepaalt de URL structuur. array('slug' => 'projecten') geeft URLs als /projecten/project-naam/.

supports: Welke features beschikbaar zijn:

  • title: Titel veld
  • editor: Content editor
  • thumbnail: Uitgelichte afbeelding
  • excerpt: Samenvatting
  • comments: Reacties
  • revisions: Versiegeschiedenis
  • custom-fields: Aangepaste velden

menu_icon: Icoon in admin menu. Gebruik Dashicons of een afbeelding URL.

show_in_rest: Nodig voor Gutenberg editor ondersteuning.

Custom Taxonomies toevoegen

Taxonomieƫn zijn categorisatiesystemen. Posts hebben Categories en Tags. Voor CPT's maak je eigen taxonomieƫn.

Met Custom Post Type UI

  1. Ga naar CPT UI > Voeg taxonomie toe
  2. Configureer:
    • Taxonomie slug: portfolio_categorie
    • Labels instellen
    • Koppel aan: portfolio
    • HiĆ«rarchisch: Ja (voor categorieĆ«n) of Nee (voor tags)

Met code

function registreer_portfolio_taxonomie() {
    $labels = array(
        'name'              => 'Portfolio categorieƫn',
        'singular_name'     => 'Portfolio categorie',
        'search_items'      => 'Zoek categorieƫn',
        'all_items'         => 'Alle categorieƫn',
        'edit_item'         => 'Bewerk categorie',
        'add_new_item'      => 'Nieuwe categorie',
    );

    $args = array(
        'labels'            => $labels,
        'hierarchical'      => true,
        'public'            => true,
        'rewrite'           => array('slug' => 'portfolio-categorie'),
        'show_in_rest'      => true,
    );

    register_taxonomy('portfolio_categorie', 'portfolio', $args);
}
add_action('init', 'registreer_portfolio_taxonomie');

Custom Fields toevoegen

CPT's worden krachtiger met custom fields. Voeg specifieke data toe zoals:

  • Klant naam (portfolio)
  • Eventdatum (evenement)
  • Prijs (product)
  • LinkedIn URL (teamlid)

Met Advanced Custom Fields (ACF)

ACF is de populairste plugin voor custom fields:

  1. Installeer Advanced Custom Fields
  2. Maak een veldgroep
  3. Voeg velden toe (tekst, datum, afbeelding, etc.)
  4. Stel locatieregels in: "Post Type is gelijk aan portfolio"
  5. Publiceer

Velden verschijnen automatisch bij het bewerken van portfolio items.

Velden tonen in templates

// In single-portfolio.php
$klant = get_field('klant_naam');
$url = get_field('project_url');

if ($klant) {
    echo '<p>Klant: ' . esc_html($klant) . '</p>';
}

Templates voor Custom Post Types

WordPress zoekt automatisch naar specifieke templates:

Archiefpagina

archive-{post_type}.php voor het archief. Voor portfolio: archive-portfolio.php

Enkele item pagina

single-{post_type}.php voor individuele items. Voor portfolio: single-portfolio.php

Template hiƫrarchie

Als specifieke templates niet bestaan, valt WordPress terug op:

  1. archive-portfolio.php / single-portfolio.php
  2. archive.php / single.php
  3. index.php

Maak specifieke templates voor optimale controle over de weergave.

CPT's queryen

WP_Query

Haal portfolio items op met WP_Query:

$args = array(
    'post_type' => 'portfolio',
    'posts_per_page' => 6,
    'orderby' => 'date',
    'order' => 'DESC',
);

$portfolio_query = new WP_Query($args);

if ($portfolio_query->have_posts()) {
    while ($portfolio_query->have_posts()) {
        $portfolio_query->the_post();
        the_title('<h2>', '</h2>');
        the_excerpt();
    }
    wp_reset_postdata();
}

Met taxonomie filter

$args = array(
    'post_type' => 'portfolio',
    'tax_query' => array(
        array(
            'taxonomy' => 'portfolio_categorie',
            'field'    => 'slug',
            'terms'    => 'webdesign',
        ),
    ),
);

CPT's in Gutenberg

Met show_in_rest => true werkt de Gutenberg editor met je CPT. Je kunt ook bepalen welke blokken beschikbaar zijn:

function portfolio_allowed_blocks($allowed_blocks, $post) {
    if ($post->post_type === 'portfolio') {
        return array(
            'core/paragraph',
            'core/image',
            'core/gallery',
            'core/heading',
        );
    }
    return $allowed_blocks;
}
add_filter('allowed_block_types_all', 'portfolio_allowed_blocks', 10, 2);

Veelgemaakte fouten

Permalinks werken niet

Na het registreren van een CPT, flush permalinks:

  1. Ga naar Instellingen > Permalinks
  2. Klik "Wijzigingen opslaan" (zonder iets te wijzigen)

Of met code: flush_rewrite_rules() (alleen bij activatie, nooit on init).

CPT verdwijnt na theme wissel

Als je CPT in functions.php van je theme staat, verdwijnt het bij theme wissel. Plaats CPT code in een site-specifieke plugin voor permanente beschikbaarheid.

Gutenberg werkt niet

Vergeten 'show_in_rest' => true toe te voegen. Dit is verplicht voor Gutenberg ondersteuning.

Plugins die CPT's gebruiken

Veel plugins maken automatisch CPT's:

  • WooCommerce: product, shop_order, shop_coupon
  • The Events Calendar: tribe_events
  • Easy Digital Downloads: download
  • LearnDash: sfwd-courses, sfwd-lessons

Je kunt deze CPT's uitbreiden met eigen velden en templates.

More information: WordPress.org documentatie

Frequently Asked Questions

How long does it take to implement this?

Implementation time varies per situation. Simple configurations can be done within an hour, more complex setups may take several hours to a day.

What are the costs?

Costs depend on your hosting provider and package. Many basic features are included for free, advanced features may incur additional costs.

Do I need technical knowledge?

You need little technical knowledge for the basics. Most hosting providers offer extensive documentation and support to help you.

Was this article helpful?

Compare hosting packages directly to find the best choice for your situation.