Terug naar overzicht

WordPress meta queries – Deel 1: Custom Post Types

Dorin Bouwman
  • Dorin Bouwman -
  • (Laatst bijgewerkt: 25 mei 2022)

In dit eerste deel van de drieluik 'Wordpress Meta Queries' legt onze back-end developer Yemna uit hoe custom post types werken binnen WordPress. In deze blog leer je hoe je de post type 'diensten' aanmaakt, voor het tonen van een dienstenpagina die vanuit de wp-admin gevuld kan worden.

WordPress bestaat in de basis alleen uit posts en pages, deze elementen worden ‘post types’ genoemd. De default post types binnen WordPress zijn post, page, attachment, revision en navigation menu. Hiernaast heeft WordPress ook de optie om je eigen post types te maken, dit heet een ‘custom post type’. Hier kun je je eigen content aan toevoegen en dit kunnen zoveel zijn als je zelf wilt!

Custom post type voor diensten

Als er diensten op een website moeten komen, kun je hiervoor bijvoorbeeld de custom post type ‘diensten’ aanmaken. Hierdoor creëer je een hoofdpagina ‘diensten’ (genaamd archive) en daaronder vallen de afzonderlijke diensten. Vaak wordt dergelijke inhoud geplaatst als losse pagina, dit is ook een oplossing maar niet dé oplossing. Hiermee moeten afzonderlijke diensten namelijk los op de pagina geplaatst worden. Met een custom post type is dit veel makkelijker. Het grote voordeel van een custom post type is namelijk dat je door één simpele meta query alle diensten kunt ophalen en filteren.

In 3 artikelen ga ik uitleggen hoe je een custom post type aanmaakt, hier custom velden aan toevoegt en ze filtert. In deze blog leg ik je uit hoe je een custom post type aanmaakt.

Custom post types

Een custom post type (CPT) maak je aan in de functions.php van het WordPress thema dat je gebruikt. Hieronder zie je een voorbeeld van de code die je daarvoor gebruikt. Ik heb een functie aangemaakt genaamd service_custom_post_type.

Om een post type aan te maken, gebruik je de standaard WordPress functie register_post_type().
De eerste parameter van deze functie is de naam van je post type, in dit geval services (diensten). Dit is de enige verplichte parameter van de functie. Dus alleen register_post_type(‘services’) is eigenlijk al voldoende zijn om je custom post type aan te maken, maar dan kun je er eigenlijk nog niks mee.
De tweede parameter is een array waarin we de volgende arguments neerzetten:

  • labels
    De name is de meervoud versie van de titel, dus in dit geval Diensten. singluar_name is de enkelvoud versie van deze titel.
  • public
    public staat standaard op false, dit zorgt er voor dat je de CPT niet kan zien in het menu, niet bereikbaar is voor de gebruiker aan de front-end en ook niet in een menu gezet kan worden. Dit moet dus op true gezet worden.
  • has_archive
    De diensten hebben naast een detailpagina, ook een hoofdpagina. Dit wordt een archive genoemd. Als has_archive op true staat, is de slug (zie hieronder) automatisch de overzichtspagina van de CPT.
  • rewrite
    Omdat de post type services heet, moet de slug aangepast worden naar Nederlands en dus naar diensten.

Er zijn nog veel meer opties mogelijk binnen het aanmaken van een custom post type. Alle arguments kun je hier vinden.

Custom post type function in WordPress aanroepen

We hebben de functie aangemaakt, nu moeten we deze alleen nog aanroepen. Dit doe je door een add_action toe te voegen. Ook deze functie heeft weer 2 parameters, beide verplicht. De eerste parameter is de naam van de actie (hook), in dit geval ‘init’. Dit betekent dat zodra WP geladen is en voordat er headers verstuurd worden, de functie uitgevoerd wordt. Er zijn ontzettend veel hooks beschikbaar binnen WP, een overzicht hiervan kun je hier vinden.

De tweede parameter is de naam van de functie die we willen gebruiken, service_custom_post_type.

function service_custom_post_type() {
   register_post_type( 'services',
     array(
       'labels' => array(
       'name' => __( 'Diensten' ),
       'singular_name' => __( 'Dienst' )
    ),
    'public' => true,
    'has_archive' => true,
    'rewrite' => array('slug' => 'diensten'),
   )
 );
}
add_action( 'init', 'service_custom_post_type' );

Sla het bestand op en refresh het admin gedeelte van WordPress. Er staat nu een menu item bij genaamd Diensten. Je kunt via dit menu-item afzonderlijke diensten aanmaken. Als je de dienst detail pagina bezoekt, kun je een 404 krijgen. Om dit te verhelpen moet je eerst de permalinks opnieuw opslaan, zo worden de permalinks geflushed en zal de gemaakte dienst bereikbaar zijn. 

Archive en single pagina’s voor custom post type

Als je een custom post type aanmaakt moet deze vaak een archive en een single krijgen. De archive wordt de overzichtspagina waarop alle diensten zichtbaar zijn en de single is de detailpagina van een dienst. Voor elke CPT is dit hetzelfde, je maakt in de themamap een php bestand aan die ‘archive_CPTNAAM.php’ heet. In ons geval is dit archive_services.php. Ditzelfde doe je voor de single ‘single_CPTNAAM.php’, hier single_services.php. Zo weet WordPress welke bestanden er uitgelezen moeten worden als je een dienst wil bekijken.

Blijf op de hoogte van nieuwe delen

Je hebt nu een custom post type aangemaakt in WordPress. Is alles goed gegaan of heb je nog vragen? Via ons contactformulier helpen we je graag verder! Je WordPress skills nog verder ontwikkelen en op de hoogte blijven van nieuwe delen in deze reeks? Schrijf je dan in voor onze nieuwsbrief! Je ontvangt dan maximaal één keer per maand een update met interessante vakgerelateerde informatie.

Dorin Bouwman

Sinds 2015 in dienst bij B2Design. In zijn vrije tijd bouwt hij drones en racet er mee. Dorin is crypto- en gadgetnerd en volgt de laatste trends op de voet.