WordPress Custom Post Type handleiding

In deze korte handleiding worden de benodigde stappen doorlopen om aan de slag te kunnen gaan met Custom Post Types die sinds WordPress 3.0 beschikbaar zijn.

Standaard Types

WordPress komt standaard met een vijftal Post Types:

  • Post (Bericht)
  • Page (Pagina)
  • Attachment (afbeelding, video, document, etc)
  • Revision (concept berichten/pagina’s, en vorige versies)
  • Nav Menu (Menu items)

Deze standaard Post Types kan je al voor veel doeleinden gebruiken. Bijvoorbeeld door berichten te taggen, categoriseren, of een eigen taxonomy mee te geven. ALs je nu echt een eigen Post Type wilt maken, dan komen de Custom Post Types dus van pas.

Custom Post Types

Hierboven hebben we gezien dat er een vijftal standaard Post Types bestaan in WordPress. Die kunnen we zelf gaan uitbreiden met eigen Custom Post Types. Voorbeelden van Custom Post Types zijn bijvoorbeeld:

  • Portfolio items
  • Huizen
  • Films
  • Spellen
  • etc, etc.

Om een Custom Post Type te maken moet je de functie register_post_type gebruiken. Deze functie kan je in een function zetten die je in je functions.php met behulp van een add_action aanroep activeert. Het is ook mogelijk de code in de vorm van een plugin te gebruiken. In een latere blog zal ik uitleggen wat, wanneer de beste keuze is.
register_post_type omvat een behoorlijk aantal parameters, waarvan er hieronder een aantal besproken worden.

Custom Post Type maken – simpel

Om de basis functionaliteit van een nieuwe Custom Post Type te kunnen gebruiken hebben we maar een klein stukje code nodig.

add_action( 'init', 'nostromo_register_post_type_portfolio' );
function nostromo_register_post_type_portfolio() {
/**
* Register some Custom Post Type(s).
*
* @author Marcel Bootsman
* @link https://nostromo.nl/wordpress-custom-post-type-handleiding/
*/
   register_post_type('portfolio',
   array(
      'labels' => array(
         'name' => __('Portfolio'),
         'singular_name' => __('Portfolio item')),
      'public' => true,)
   );
}

Met deze code maken we een Custom Post Type ‘portfolio’ aan. Als parameters geven we twee labels mee en geven we aan dat het een publiek Custom Post Type is (zodat deze in het Dashboard is te zien, en op de website te tonen is d.m.v. de Loop.

Custom Post Type maken – uitgebreid

Met bovenstaand voorbeeld hebben we al een volledig functionele Custom Post Type. De register_post_type functie heeft alleen nog veel meer mogelijke argumenten om in te stellen. In onderstaande lijst staan de meest gebruikte argumenten (complete lijst met beschrijving is hier te vinden):

  • labels
  • description
  • public
  • publicly_queryable
  • exclude_from_search
  • show_ui
  • show_in_menu
  • menu_position
  • menu_icon
  • hierarchical
  • supports
  • taxonomies
  • has_archive
  • rewrite
  • query_var
  • can_export

Als we nu al deze argumenten gaan gebruiken krijgen we de volgende code:

add_action( 'init', 'nostromo_register_post_type_portfolio' );
function nostromo_register_post_type_portfolio() {
/**
* Register some Custom Post Type(s).
*
* @author Marcel Bootsman
* @link https://nostromo.nl/wordpress-custom-post-type-handleiding/
*/
   register_post_type('portfolio',
   array(
      'labels' => array(
         'name' => __('Portfolio'),
         'singular_name' => __('Portfolio'),
         'add_new' => __('Nieuw portfolio item'),
         'add_new_item' => __('Voeg nieuw portfolio item toe'),
         'edit' => __('Wijzig'),
         'edit_item' => __('Wijzig portfolio item'),
         'new_item' => __('Nieuw portfolio item'),
         'view' => __('Bekijk'),
         'view_item' => __('Bekijk portfolio item'),
         'search_items' => __('Zoek portfolio item'),
         'not_found' => __('Geen portfolio item gevonden' ),
         'not_found_in_trash' => __( 'Geen portfolio item gevonden in prullenbak' ),
         'parent' => __( 'Bovenliggend portfolio item' ),
      ),
      'description' => __('Een portfolio item wordt gebruikt om de portfolio mee te vullen.'),
      'public' => true,
      'publicly_queryable' => true,
      'exclude_from_search' => false,
      'show_ui' => true,
      'show_in_menu' => true,
      'menu_position' => 20,
      'menu_icon' => get_stylesheet_directory_uri() . '/images/cpt_portfolio_icon.png',
      'hierarchical' => false,
      'supports' => array(
         'title',
         'editor',
         'excerpt',
         'custom-fields',
         'comments',
         'thumbnail'),
      'taxonomies' => array( 'post_tag', 'category'),
      'has_archive' => true,
      'rewrite' => array(
         'slug' => 'portfolio',
         'with_front' => false ),
      'query_var' => true,
      'can_export' => true,)
   );
}

Een Custom Post Type bekijken

Allemaal leuk en aardig dat we nu ons eigen Custom Post Type hebben opgezet, maar hoe krijg je ze nou te zien op je site? Standaard wordt de single.php gebruikt om een enkel bericht te tonen. Deze wordt ook gebruikt voor de Custom Post Type. Als single.php niet beschikbaar is, dan wordt de index.php gebruikt. Als je zelf een template wilt maken voor je Custom Post Type, dan dien je deze single-custom_post_type_naam.php te noemen. In dit voorbeeld dus single-portfolio.php.

Als je op een pagina meerdere Custom post Types wilt tonen, dan kan je de standaard WordPress loop aanpassen door aan te geven dat je alleen het Custom Post Type wilt tonen.

$portfolio_loop = new WP_Query(array('post_type' => 'portfolio'));

Na het aanmaken van een Custom Post Type is het nodig je permalinks instellingen opnieuw op te slaan. Dit zorgt ervoor dat het Custom Post Type met zijn rewrite slug te benaderen is.

Er is nog veel meer

Deze blog omvat niet alle info die er is te vertellen over Custom Post Types. Mocht je meer willen weten over een specifiek onderdeel, laat het dan weten in de reacties of kom eens langs op het WordPress spreekuur. Meer informatie over Custom Post Types is o.a. hier te vinden:


,

7 reacties op “WordPress Custom Post Type handleiding”

  1. Er lijkt me dat er in de uitgebreide code ‘Custom Post Type maken – uitgebreid’ een fout staat in regel 43: ‘has_archive’ => ’true’.
    Doordat er aanhalings-tekens om true staan wordt eht een string in plaats van een boolean. Het moet dus zijn:
    ‘has_archive’ => true,

  2. Waar ik nog niet helemaal uit kom is het volgende.

    Ik wil graag een 2e blogpagina toevoegen. Heb al verschillende dingen geprobeerd maar het worden toch allemaal losse pagina’s of categorie.

  3. Marcel,

    Je hebt me net uit de nood geholpen … na uren zoeken ben ik oh zo blij dat je op het laatste vermeldt dat je je permalinks moet updaten … UREN heb ik er aan verloren omdat het maar niet werkte en ik niet wist dat je dit handmatig moest doen …