Custom post types zijn een krachtige feature van WordPress. Door post types is WordPress niet alleen maar een eenvoudige bloggingtool, maar een volledig content management systeem. Ze zorgen voor de onmiskenbare flexibiliteit die nodig is om een écht mooie website te maken.
Aan de andere kant kunnen WordPress custom post types ook voor verwarring zorgen: want wat zijn custom post types eigenlijk precies? Hoe verschillen ze van normale berichten en pagina’s? Hoe maak je ze? En als je eenmaal een custom post type hebt gemaakt, hoe wijs je deze dan toe aan je berichten, geef je ze weer op je site, en hoe slaat WordPress ze op?
In dit artikel laat ik je precies zien wat WordPress custom post types doen en hoe ze werken. Ik vergelijk ze met de normale post types waarmee je al bekend bent, leer je hoe je ze kunt maken, en laat zien hoe je de templatebestanden van je thema kunt gebruiken om ze op je website weer te geven.
Laten we beginnen!
Wat zijn custom post types binnen WordPress?
Het is waarschijnlijk het makkelijkst om custom post types uit te leggen door eerst een algemener concept uit te leggen: de normale post types.
Post types zijn manieren om verschillende soorten content te categoriseren binnen WordPress. Ik neem aan dat je al bekend bent met de twee meest voorkomende post types: berichten en pagina’s. Maar wat je misschien niet weet is dat WordPress ook enkele andere post types huisvest.
Post types die al bij WordPress inzitten
WordPress heeft in totaal zeven post types:
- Berichten
- Pagina’s
- Bijlagen
- Revisies
- Navigatiemenu’s
- Custom CSS
- Changesets
Goede kans dat je nog nooit van changesets gehoord hebt. En wellicht ben je wel eens de woorden custom CSS tegengekomen binnen je website, maar realiseerde je je niet dat ook dit een post type is.
Voor de meeste WordPress-gebruikers en -ontwikkelaars zijn de enige post types die relevant zijn de eerste vijf: berichten, pagina’s, bijlagen, revisies en navigatie-menu’s.
Laten we deze allemaal wat beter bekijken zodat we ze beter begrijpen.
WordPress post types: Berichten
Het “bericht” is het post type dat je het meest zult gebruiken binnen WordPress. Berichten zijn dynamische content: zo ontworpen om vaak bijgewerkt te worden. Je kunt categorieën en tags aan ze toewijzen, waardoor ze te zien zijn op verschillende archiefpagina’s, en ze zijn ook te zien op je homepagina en blogpagina. Vaak bestaat het grootste deel van je content uit berichten.
Noot: Binnen WordPress, kan “post” twee dingen betekenen. Binnen de database is een post een post van welk post type dan ook, dus dat zijn ook pagina’s, bijlagen en alle andere soorten. Maar wanneer de meeste mensen het hebben over posts, bedoelen ze de berichten van een blog (zoals dit artikel). Deze horen bij het post type “bericht”.
WordPress post types: Pagina’s
Als je al een WordPress-website hebt, zijn pagina’s het andere contenttype waar je al bekend mee bent. Het is statische content, ontworpen om langer rond te blijven hangen dan berichten, en om je informatie te geven over zaken die niet zo snel veranderen. Goede voorbeelden hiervan zijn contactgegevens of de “over ons” pagina van een bedrijf.
Pagina’s kunnen geen categorieën of tags hebben en zijn niet ontworpen om weergegeven te worden binnen archiefpagina’s. De meeste bezoekers zullen je pagina’s vinden via je navigatiemenu.
Noot: Binnen internetjargon kan een pagina elk type pagina binnen je website betekenen. Toen het internet eerst ontwikkeld werd, bestond het uitsluitend uit statische content die direct geprogrammeerd moest worden via het schrijven van HTML. Dus met “webpagina” kunnen allerlei verschillende soorten pagina’s op je website bedoeld worden, inclusief een statische pagina binnen WordPress-begrippen, een archiefpagina of een bericht. In dit artikel, als ik het heb over pagina’s, bedoel ik de pagina zoals we dat binnen WordPress bedoelen, dus een statische pagina (denk aan de contactpagina). Soms zal ik ook refereren aan archiefpagina’s, maar dat zijn geen pagina’s in zoverre dat je een pagina aanmaakt om ze op te slaan. WordPress doet dat namelijk al voor je.
WordPress post types: bijlagen
Een bijlage is een media-item dat geüpload is naar je website. Binnen de WordPress database is dat niet het media-bestand zelf, maar de data die ernaar verwijst. Elke bijlage zal dus een unieke ID en metadata hebben zoals de titel, omschrijving, alternatieve tekst, en meer.
Elke bijlage heeft ook een eigen bijlage-pagina met een unieke URL. Je kunt de URL ervan vinden via het scherm waarin je de gegevens voor je bijlage bewerkt.
Bijlagen kunnen allerlei verschillende soorten uploads zijn: afbeeldingen, video’s, pdf-bestanden, etc. Je kunt ze vinden en bewerken via het Media-item in het WordPress admin-menu, of je kunt ze direct naar de juiste pagina of bericht uploaden tijdens het bewerken van een pagina. Elke bijlage die je uploadt naar een bericht zal vervolgens beschikbaar worden voor bewerking via het Media-menu.
WordPress post types: Revisies
Nu zijn we aangekomen bij de meer obscure post types.
Elke keer dat je een nieuwe versie opslaat van een bericht, pagina of bijlage of een custom post type, zal WordPress een revisie aanmaken om de specifieke versie van dat bericht te markeren.
Je kunt de revisies van elk bericht en pagina binnen je site zien door naar het gerelateerde bewerkingsscherm te gaan en het Document-tabblad aan de rechterkant te openen. Hier krijg je een notificatie te zien die je vertelt hoeveel revisies er voor een bericht zijn. Hieronder zie je een screenshot van een bericht dat ik aan het bewerken ben, dat momenteel vijf revisies bevat.
Als je niet de Gutenberg-editor gebruikt, kun je de revisies zien door naar de onderkant van het bewerkingsscherm te scrollen, waar je een lijst met revisies vindt:
Als je klikt op de box Revisies, ga je naar een scherm dat de laatste twee versies van je bericht laat zien. Van daaruit kun je de revisies bekijken en eventueel je bericht terugzetten naar een eerdere versie van het bericht.
WordPress zal na verloop van tijd een hoop revisies van je website aanmaken, waardoor je database er vol mee zal komen te staan (lees hier het advies van Kinsta over hoe je revisies in moet stellen om betere prestaties te krijgen!). Revisies zijn dus een post type net als elk ander, en ze worden op dezelfde manier opgeslagen, waarover zo direct meer.
WordPress post types: Navigatiemenu’s
Navigatie-menu’s, of preciezer, de items binnen je navigatiemenu, zijn ook een post type.
Elk item in je navigatie-menu wordt opgeslagen als een apart item binnen je database. Dankzij de metadata weet WordPress dat het om een item voor een navigatiemenu gaat, waar het precies binnen het navigatiemenu moet verschijnen, en waar het naartoe linkt.
Je kunt navigatie-items niet op dezelfde manier bewerken als andere post types. Je moet ze bewerken via de Customizer of via het Menu’s-pagina.
WordPress post types: Custom CSS
Als je je eigen CSS toevoegt via de Customizer, zal je werk worden opgeslagen via dit custom post type. Een nieuw bericht (van het post type “custom CSS”) zal opgeslagen worden voor de custom CSS voor elk thema binnen je website, en WordPress zal alleen dat bestand gebruiken dat gerelateerd is aan het huidige actieve thema.
WordPress post types: Changesets
Changesets zijn ongeveer net als revisies, maar ze hebben betrekking op de Customizer in plaats van op berichten. Wanneer je een verandering doorvoert binnen de Customizer, zal het opgeslagen worden als een changeset, vergelijkbaar zoals dat bij een concept-bericht zou gebeuren.
Nu we het hele spectrum van WordPress post types afgegaan zijn, kunnen we dieper ingaan op de custom post types van WordPress.
Het verschil tussen een normaal bericht en een custom post type
Nog even snel samenvatten: een “post” kan dus twee dingen betekenen.
Een post type kan een type bericht zijn in de bredere zin van het woord, waar een bepaald stukje content toe behoort. In de Engelse versie van WordPress heet dit een “post”, wat voor verwarring zorgt. In het Nederlands heet dit een “bericht”. Daarnaast is een bericht zelf ook een post type, net als “pagina”, “bijlage” of een custom post type dat je zelf aanmaakt (ik weet dat het verwarrend is, maar ik leg het zo wat verder uit).
Als je wel zelf een eigen custom post type aanmaakt, dan is dit dus geen “bericht”, het post type dat je normaal gebruikt voor het schrijven van je blogartikelen. Het is een post type die net als andere post types worden opgeslagen in de database.
WordPress custom post types: Veelvoorkomende toepassingen
Nu weten we wat een custom post type is. Maar wanneer zou je er één moeten gebruiken? Het antwoord is: elke keer wanneer je content toevoegt aan je website die niet in één van de standaard post types past.
Enkele veelvoorkomende voorbeelden van custom post types zijn:
- Producten van een webshop.
- Portfolio-items of projecten op een portfolio-website.
- Kaarten voor een kaartenwebsite.
- Evenementen voor een boekingswebsite.
Dit zijn een aantal van de meest voorkomende toepassingen, maar er zijn er natuurlijk nog veel meer mogelijk. Mijn advies bij het afwegen of je een custom post type moet gebruiken voor een nieuw stuk content is om jezelf het volgende af te vragen:
Wil ik mijn nieuwe content laten zien binnen mijn hoofdblog, als een statische pagina, of wil ik het laten zien binnen een aparte archiefpagina?
In sommige gevallen is het genoeg om een categorie toe te wijzen aan je nieuwe content om het makkelijk te kunnen filteren van de rest van je content. Bijvoorbeeld als je een blog hebt en je casestudy wilt opnemen die je een eigen (archief)pagina wil geven. Dit kan je doen door een “Casestudy” categorie aan te maken. Maar als je je nieuwe content volledig apart wilt houden van je normale blogberichten, is het verstandig om er een apart post type voor aan te maken.
Hoe post types opgeslagen worden door WordPress
De inhoud van een custom post type wordt op dezelfde manier opgeslagen als standaard berichten (en pagina’s etc.). Laten we dit wat beter bekijken.
Je WordPress-website heeft een aantal database-tabellen (ENG: tables) om content en instellingen in op te slaan. Het minimumaantal tabellen is 12, maar je website kan er meer hebben als het Multisite gebruikt of als je een plugin hebt die meer tabellen gebruikt.
In het screenshot hierboven zie je twee tabellen die eruitzien alsof ze met berichten te maken hebben: wp_posts en wp_postmeta.
De wp_posts tabel slaat alle content van je berichten op, van alle post types. Het maakt dus niet uit of we het hebben over een blogbericht, een pagina, een revisie, bijlage of custom post type: het wordt allemaal opgeslagen in de wp_posts tabel.
WordPress weet welk post type elk bericht heeft omdat het een waarde toewijst binnen de post_type kolom in de wp_posts tabel. Die waarde komt overeen met het post type. Wanneer je dus een nieuw blogbericht toevoegt, zal WordPress een bericht toevoegen aan de wp_posts table, met als post_type “post.” En als je een custom post type toevoegen met de naam “product,” dan zal elk product dat je aanmaakt een regel in de wp_posts table krijgen met “product” als waarde in het post_type veld.
De wp_postmeta tabel is voor het opslaan van metadata van je berichten, zoals de naam doet vermoeden. Het heeft vier velden:
- meta_id: het id van dit item in de wp_postmeta tabel.
- post_id: het id van de specifieke post waar dit item met metadata over gaat. Een bericht kan meerdere regels beslaan binnen de wp_postmeta table.
- meta_key: de index voor dit specifieke type metadata. Een statische pagina bijvoorbeeld, kan als mogelijke index hebben page_template, waarmee wordt geregistreerd welk sjabloon voor die pagina wordt gebruikt.
- meta_value: de daadwerkelijke waarde voor het veld. Als we weer een pagina als voorbeeld nemen, zal de meta_value hier “default” zijn als we het standaard sjabloon gebruiken.
Verschillende soorten metadata worden dus opgeslagen voor een bericht, afhankelijk wat voor post type het is.
Je hoeft niet al te hard na te denken over welke data opgeslagen wordt binnen wp_posts en elke in wp_postmeta, maar het is handig om te begrijpen dat alle post types op dezelfde plek opgeslagen worden. Dit betekent namelijk dat WordPress ze allebei op min of meer dezelfde manier verwerkt.
De relatie tussen custom post types en custom taxonomieën en custom velden
Voordat we verder kijken hoe je een custom post type kunt aanmaken in WordPress, laten we eerst kijken hoe een custom post type samenwerkt met andere custom content types, zoals custom taxonomieën en custom velden.
Custom taxonomieën
Taxonomieën worden bij WordPress gebruikt om berichten van alle post types te categoriseren. Voor standaard berichten zijn de twee gebruikte taxonomieën categorieën en tags.
Wanneer je je custom post type registreert, kunt je kiezen om een bestaande taxonomie eraan toe te wijzen. Je kunt de “category” taxonomie eraan toevoegen wanneer je de taxonomie registreert. Ik zal je zo laten zien hoe je dat doet bij de demonstratie van het registreren van een custom post type.
Je kunt ook volledig nieuwe taxonomieën aanmaken voor je custom post type, wat vaak gedaan wordt.
Als je dus bijvoorbeeld een “product” post type aanmaken voor een e-commercewebsite, kun je een “afdeling” taxonomie maken zodat je eenvoudig je producten kunt sorteren op afdeling binnen je winkel.
Als je een “evenement” post type maakt, zou je een taxonomie met “soort evenement” kunnen maken waarmee je bijvoorbeeld kunt aangeven dat het gaat om een concert, musical, of comedy-avond.
De taxonomieën kun je zelf aanmaken zoals je wilt, en zullen afhangen van de manier waarop je je berichten wilt kunnen weergeven en sorteren.
Custom velden
Een ander custom content type binnen WordPress zijn custom velden, ook wel post metadata genoemd. Custom velden zijn additionele metadata die je kunt toevoegen aan een post, mits het post type dit ondersteunt. Wanneer je een custom post type registreert, kun je zo custom velden ondersteunen:
supports => array( ‘custom-fields’ );
Dit wordt doorgevoerd als een array zodat je verschillende opties kunt gebruiken.
Als je dus metadata voor je custom post type wilt toevoegen, bijvoorbeeld maat of kleuren binnen een klerenwinkel binnen het “product” post type, kun je een custom veld gebruiken om dat te doen.
Custom velden zijn anders dan custom taxonomieën, omdat je ze niet kan gebruiken om een archiefpagina aan te maken.
Bekijk hier een voorbeeld voor een kledingwinkel. Je zou een archiefpagina kunnen willen voor elk voorbeeld van een “afdeling” taxonomie, zoals “Heren”, “Dames”, etc. Stel je nu voor dat je ook een custom veld hebt dat “Maat” heet. Je zou geen archiefpagina willen maken voor elke maat, aangezien je klanten daar niet naar zoeken.
Volg dus deze regel om te bepalen of je een custom taxonomie of custom veld nodig hebt: zul je dat stukje data nodig hebben om je berichten weer te geven op een archiefpagina?
Ik zal je later laten zien hoe je archiefpagina’s maakt voor je custom post types en custom taxonomieën.
Zo voeg je een custom post type toe via een plugin
Nu je weet wat custom post types zijn en of je er één nodig hebt voor de je website is de volgende vraag: hoe voeg je dit toe?
Er zijn twee manieren: door een plugin te gebruiken, of door het handmatig te programmeren. Laten we beginnen met de plugin.
Er zijn twee soorten plugins die je kunt gebruiken om een custom post type toe te voegen: de eerste soort registreert een custom post type om bepaalde functionaliteiten – die nodig zijn om de plugin te laten werken – aan je website toe te voegen. De tweede soort biedt je een interface waarmee je zelf je eigen post types kunt maken.
Denk bij de eerste soort aan plugins als e-commerce-plugins, evenementplugins en meer. Laten we beginnen met één van de bekendste WordPress-plugins, WooCommerce.
Zo gebruik je WooCommerce om een custom post type te registreren
WooCommerce is een goed voorbeeld van een plugin dat een custom post type aanmaakt om zelf goed te kunnen werken. In dit geval is dat het “product” post type.
WooCommerce registreert daarnaast een aantal custom taxonomieën en custom velden waarmee je je winkel kunt organiseren, zoals productcategorieën en product tags. Deze zijn anders dan de categorieën en tags die je zou gebruiken voor je blogberichten.
Zo gebruik je de Events Calendar Plugin om een custom post type te registreren
De Events Calendar plugin is nog een ander voorbeeld van een plugin die een custom post type aanmaakt. In dit geval is dat het “event” post type.
De plugin voegt ook een taxonomie toe speciaal voor evenementen: ”event category”. Het past ook normale tags toe op je evenementen, zodat je dezelfde tags kunt gebruiken als bij je blogberichten.
Zo gebruik je WP Google Maps om een custom post type te registreren
Net als WooCommerce en The Events Calendar is WP Google Maps een WordPress kaarten plugin die een custom post type registreert voor je kaarten.
Het “map” post type werkt wat anders dan de product of event post types in de vorige plugins, omdat je geen archiefpagina van al je kaarten zou weergeven. In plaats daarvan geeft de plugin je een shortcode voor elke kaart die je maakt, die je aan een bericht of pagina kunt toevoegen. Maar alhoewel je kaarten niet op dezelfde manier als andere post types gebruikt, is het nog steeds een post type.
Zo gebruik je de Custom Post Type UI Plugin
Als je je eigen custom post type wilt aanmaken in plaats van één te gebruiken die hoort bij een plugin zoals WooCommerce, kun je een plugin gebruiken die je een interface biedt waarmee je makkelijk je eigen post type kunt toevoegen.
Een voorbeeld van zo’n plugin is de Custom Post Type UI plugin.
De plugin laat je je eigen post type aanmaken via de adminpagina’s, zonder dat je zelf code hoeft te schrijven.
De plugin geeft je een aantal vensters waarin je alle elementen van een post type kunt registreren die je normaal in de register_post_type()
functie zou toevoegen. Om een nieuw post type met de plugin toe te voegen, ga je naar CPT UI > Add/Edit Post Types.
Vanaf daar kun je een nieuw post type toevoegen of een bestaande bewerken.
Je kunt de instellingen voor het post type bewerken of alles op de standaardinstellingen laten staan. Je kunt de volledige documentatie van alle instellingen en opties voor een post type vinden in de WordPress Codex.
Je kunt de plugin ook gebruiken om een custom taxonomie aan te maken en die aan je nieuwe post type toe te wijzen, of een ander reeds bestaand post type. En wanneer je de plugin gebruikt om een nieuw post type te maken, kun je ook al bestaande taxonomieën eraan toewijzen.
Zo gebruik je de Pods Plugin om een custom post type aan te maken
De Pods plugin is een andere plugin die je een interface biedt om een nieuw custom post type te maken zonder dat je zelf code hoeft te schrijven.
Pods biedt je ook de mogelijkheid om al bestaande post types uit te breiden. Zo kun je bijvoorbeeld extra velden of taxonomieën toevoegen en de instellingen ervan aanpassen.
De Pods plugin gebruikt een post type (“pod”) om al je aanpassingen op te slaan, en laat je ook je eigen post types aanmaken, ongeveer net als de Custom Post Type UI plugin, maar dan met een interface die je meer aan de hand neemt tijdens het proces. Dat maakt het dus wat makkelijker, maar het nadeel is dat de plugin meer code toevoegt aan je website (en meer data aan je database) dan wanneer je het zelf zou programmeren.
Als je liever geen bestaande plugin gebruikt, kun je gelukkig zelf ook custom post types programmeren.
How to Register Your Own Custom Post Type in WordPress
Als je er niet voor terugdeinst om zelf code te schrijven, kun je de register_post_type()
functie gebruiken om je eigen post type aan te maken. Dit is de meest efficiënte manier om het te doen.
Uit ervaring weten we dat het beter is om code voor een custom post type toe te voegen via een plugin, dan rechtstreeks je thema aan te passen. De reden hiervoor simpel: wanneer je je thema in de toekomst verandert, dan behoudt je je post types samen met alle berichten die je met dat type hebt gemaakt. Hetzelfde geldt voor wanneer je je thema moet updaten.
Laten we de stappen doornemen om je eigen custom post type aan te maken bij WordPress.
Het maken van je plugin
Allereerst moet je je plugin aanmaken. In de wp-content/plugins map van je ontwikkelings- of testwebsite (dus nog niet je live website) voeg je een map toe voor je plugin. Binnen die map voeg je een PHP-bestand toe. Ik noem de mijne kinsta-register-posttype.php.
Tip: Ik maak zelf altijd graag een plugin aan binnen een map in plaats van direct een plugin-bestand toe te voegen aan de wp-content/plugins map. Op die manier, wanneer ik meer bestanden toevoeg aan mijn plugin, zoals scripts, styles of andere bestanden, kan ik die meteen in dezelfde map zetten.
Binnen je nieuwe php-bestand, voeg je de volgende tekst toe als commentaar bij je plugin:
<?php
/*
Plugin Name: Register Custom Post Types
Plugin URI: http://rachelmccollin.com
Description: Plugin to register the book post type
Version: 1.0
Author: Rachel McCollin
Author URI:http://rachelmccollin.com
Textdomain: kinsta
License: GPLv2
*/
Dit geeft WordPress (en de gebruiker) de belangrijkste informatie over de plugin:
- Hoe de plugin heet
- Waar je meer informatie kunt vinden
- Wat de plugin doet
- Het versienummer
- Wie de plugin heeft ontwikkeld en waar je meer informatie over de ontwikkelaar kunt vinden
- Het tekstdomein voor internationalisering
- De licentie, die altijd GPL moet zijn.
Je plugin is nu dus klaargezet, en als je wilt kun je het meteen activeren in je beheerderpagina’s (ook al doet de plugin nog niets).
Instellen van de functie voor je post type
Laten we nu de functie maken waarmee je je post type registreert. In mijn voorbeeld ga ik een post type maken met de naam “book”, voor een denkbeeldige website voor boekreviews. Wat je in jouw geval gebruikt, hangt natuurlijk af van waarvoor je jouw custom post type wil gebruiken.
Onder de tekst die als commentaar gemarkeerd is, voeg je dit toe:
function kinsta_register_post_type() {
}
add_action( 'init', 'kinsta_register_post_type' );
Deze functie bevat alle code voor je custom post type. Je wilt wellicht de naam veranderen en ander voorvoegsel dan kinsta_ gebruiken. Het is goed gebruik om een prefix op al je functie te zetten zodat ze niet dezelfde naam krijgen als een functie van een ander thema of andere plugin.
De rest van de code komt binnen de haken van deze functie.
Definiëren van de labels van je custom post type
Nu gaan we de labels voor je custom post type definiëren. Voeg binnen de krulhaken dit toe:
$labels = array(
'name' => __( ‘Books’, ‘kinsta’ ),
'singular_name' => __( 'Book', ‘kinsta’ ),
'add_new' => __( 'New Book', ‘kinsta’ ),
'add_new_item' => __( 'Add New Book', ‘kinsta’ ),
'edit_item' => __( 'Edit Book', ‘kinsta’ ),
'new_item' => __( 'New Book', ‘kinsta’ ),
'view_item' => __( 'View Books', ‘kinsta’ ),
'search_items' => __( 'Search Books', ‘kinsta’ ),
'not_found' => __( 'No Books Found', ‘kinsta’ ),
'not_found_in_trash' => __( 'No Books found in Trash', ‘kinsta’ ),
);
Je zult de naam moeten veranderen als je een ander type dan “book” als custom post type wilt. Er zijn meer labels die je kunt gebruiken, maar in mijn ervaring zijn de bovenstaande meestal genoeg.
Let op dat ik internationalization in mijn labels gebruik, dus ze zullen vertaald worden naar de lokale taal van een gebruiker.
Definiëren van de argumenten van je custom post type
De volgende stap is het definiëren van de argumenten. Eén van de argumenten is de array met labels die we al toegevoegd hebben.
Onder de labels, en nog steeds binnen de haken, voeg je dit toe:
$args = array(
'labels' => $labels,
'has_archive' => true,
'public' => true,
'hierarchical' => false,
'supports' => array(
'title',
'editor',
'excerpt',
'custom-fields',
'thumbnail',
'page-attributes'
),
'taxonomies' => 'category',
'rewrite' => array( 'slug' => 'book' ),
‘show_in_rest’ => true
);
Laten we eens kijken wat deze allemaal doen.
- Het labels argument is de array met labels die we al eerder definieerden.
'has_archive' => true
zorgt dat je een post type archief voor je custom post type kunt maken. Dit staat standaard op false dus ik overschrijf dit graag zodat ik de mogelijkheid heb om juist wel een post type-archief te maken (ik laat zo zien hoe).'public' => true
zorgt dat het post type ook verschijnt binnen de zoekresultaten en custom zoekopdrachten. Ook dit staat standaard uit en wil ik graag inschakelen.- De “hierarchical” waarde hangt af van hoe je precies je custom post type wilt gaan gebruiken. Als je dit op “true” zet, zal het post type zich gedragen als het pagina-type, waarbij je een hiërarchie kunt aanbrengen met parent en child-berichten. Als je dit op “false” zet, zal het zich gedragen als een gewoon bericht, zonder hiërarchie.
- De “supports” array definieert een aantal features van post types die dit custom type kan ondersteunen. Ik wil graag zeker weten dat features zoals uitgelichte afbeeldingen en custom velden aanstaan.
- Het “taxonomies” argument definieert de bestaande taxonomieën die van toepassing zijn op dit post type. Hier gebruik ik de “category” taxonomie. Als je graag een custom taxonomie wil gebruiken maar deze nog niet hebt geregistreerd, sla je deze regel gewoon over en registreer je de taxonomie bij het post type. Als je al wel een custom taxonomie hebt geregistreerd kun je het via deze regel aan het post type toewijzen.
- Ik gebruik het “rewrite” argument omdat ik de taxonomie een andere naam wil geven dan ik normaal gebruik. Ik zal dat zo toelichten.
‘show_in_rest’ => true
zorgt dat het post type toegankelijk is via de REST API en de Gutenberg-interface. Het staat standaard op “false”, wat ik niet snap: ik wil dat al mijn post types dezelfde interface gebruiken!
Dat waren alle argumenten. Maar we hebben nog niet het daadwerkelijke post type geregistreerd. Laten we dat dus nu doen.
Toevoegen van de register_post_type() functie
De laatste stap is dit allemaal samenvoegen in de register_post_type()
functie.
Onder je argumenten maar nog altijd binnen de haken, voeg je dit toe:
register_post_type( ‘kinsta_book', $args );
Dit registreert het “kinsta_book” post type, met de argumenten die we al gedefinieerd hadden.
Nu snap je misschien ook beter waarom ik het “rewrite” argument gebruikte. Ik voeg graag een voorvoegsel toe aan de namen van mijn post type, zodat ik zeker weet dat de namen niet overeenkomen met post types van een andere plugins, maar ik wil niet dat het voorvoegsel publiek is.
Standaard laat WordPress een voorbeeld van je post type zien met de naam van het post type in de URL. Mijn boek heet dus “My Wonderful Book” en zou als URL hebben mysite.com/kinsta_book/my-wonderful-book. Ik wil dat niet, dus daarom gebruik ik het “rewrite” argument om de URL te veranderen naar mysite.com/book/my-wonderful-book. Ziet er beter uit toch?
Sla nu je bestand op en activeer je plugin binnen de WordPress admin-omgeving. Je ziet nu een nieuw post type verschijnen binnen je admin-menu.
Het post type is nu geregistreerd en je kunt het dus gaan gebruiken. Neem de tijd om enkele berichten eraan toe te voegen (dus berichten met je custom post type) en dan kijken we hoe je het kunt weergeven aan de voorkant.
Zo geef je een custom post type weer op je website
De meeste custom post types die je aan je website toevoegt zullen functioneren als berichten, wat betekent dat ze zijn ontwerpen om weergegeven te worden binnen archiefpagina’s. Misschien gebruik je een custom taxonomie om ze weer te geven, of heb je de “category” taxonomie toegevoegd zoals ik dat deed.
Je kunt ook een plugin zoals WooCommerce hebben gebruikt die bepaalde functionaliteiten bevat die een custom post type nodig heeft. Die plugin voegt dan ook vaak specifieke pagina’s toe (bijvoorbeeld de “Shop2” pagina) die zijn ontworpen om je custom post type weer te geven.
De vier mogelijkheden om je custom post type weer te geven zijn:
- Het individuele bericht weergeven, dus in mijn voorbeeld het boek
- Het volledige archief van het post type weergeven, dus in mijn geval alle boeken.
- Een archief op basis van een custom taxonomie weergeven, door een taxonomie te gebruiken die je hebt geregistreerd bij je custom post type.
- Het integreren van berichten van het custom post type binnen het archief van een bestaande taxonomie, zoals “category”, of binnen de hoofdblog.
Laten we deze allemaal bekijken.
Waarschuwing! Als je op enig moment in dit proces niet bij je archieven of individuele berichten van je custom post type kunt, dan is dat omdat WordPress de permalinks ervan nog niet geschreven hebt. Om dit op te lossen ga je naar Instellingen > Permalinks en klik je op de Wijzigingen opslaan knop. Dit vertelt WordPress dat ze moeten kijken of er nieuwe post types zijn en er URL’s voor moeten aanmaken.
Weergeven van het archief van het post type
De eerste optie is dat je een archiefpagina maakt voor alle berichten van het nieuwe custom post type.
Als je “has_archive” als “true” hebt ingesteld bij het registreren van het post type, zal WordPress automatisch een archiefpagina van je post type maken. Je kunt deze pagina toevoegen aan je navigatiemenu via de Customizer.
Toevoegen van het archief van je nieuwe post type via de Customizer
Open de Customizer en selecteer de Menu’s optie. Selecteer je hoofdmenu en klik op Add items om extra items toe te voegen.
Selecteer je post type van de opties die verschijnen en klik op het pijltje naar beneden naast de naam. Je zult dan een lijst met alle berichten zien die je hebt toegevoegd, plus een optie die in mijn geval All Books heet. Klik daarop en dan wordt het toegevoegd aan je menu.
Als je dan op het item in het menu klik kun je het label aanpassen. Ik noem de mijne liever niet “All Books” maar gewoon “Books”.
Let erop dat je dit alleen via de Customizer kan doen – niet via het Menu’s scherm. Zorg dus dat je de Customizer gebruikt om een archiefpagina toe te voegen aan je menu.
Aanpassen van het archief van je post type
WordPress zal de sjabloonhiërarchie gebruiken om te bepalen welk sjabloonbestand binnen je thema ze moeten gebruiken om je archiefpagina weer te geven.
Als je thema een archive.php bestand heeft zal WordPress die gebruiken, en als die niet bestaat, zullen ze index.php gebruiken.
Als je de manier waarop je archief wordt weergegeven wilt aanpassen, kun je een sjabloonbestand voor je archiefpagina voor je custom post type maken.
Voor een specifiek custom post type moet je een sjabloonbestand maken met de naam archive-$posttype.php waarbij $posttype de naam van je post type moet zijn. Voor mijn “book” post type zou ik dus een bestand maken met de naam archive-kinsta_book.php.
De makkelijkste manier om dit bestand te maken is door het archive.php bestand van je thema te kopiëren. Geef het een nieuwe naam en bewerk het zodat je archiefpagina wordt weergegeven zoals jij dat wilt.
Weergeven van individuele berichten
Individuele berichten die je met het custom post type hebt gemaakt zullen ook weergegeven worden volgens het eerste relevante sjabloonbestand dat binnen de hiërarchie gevonden wordt.
Je kunt verder gaan bij individuele berichten dan bij archieven: niet alleen kun je een sjabloonbestand voor het post type maken (single-$posttype.php), maar je kunt ook een bestand maken voor een individueel bericht, door de slug van dat bericht te gebruiken (single-$postype-slug.php).
Als ik dus Great Expectations hebt toegevoegd voor mijn boekreviewwebsite, kan ik een bestand maken voor alle boekreviews genaamd single-kinsta_book.php, of ik kan een specifiek bestand voor dat ene boek maken met de naam single-kinsta_book-great-expectations.php. Als ik beide bestanden niet zou maken, gebruikt WordPress standaard de single.php of de singular.php of de index.php, afhankelijk van welke bestanden er bestaan.
Toevoegen van custom post types aan de hoofdblog
Standaard zijn alleen berichten op je hoofdblog van het type “post” te zien. Maar als je ook je nieuwe custom post type wilt laten zien?
Dan doe je dat door de pre_get_posts hook in WordPress te gebruiken.
Binnen je plugin waarmee je het post type hebt gemaakt, voeg je dit toe:
<?php
function kinsta_books_on_blog_page() {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( ‘post_type', array( ‘post’, ‘kinsta_book’ );
}
}
add_action( 'pre_get_posts', 'kinsta_books_on_blog_page' ); ?>
Hiermee controleer je of je op de “home” pagina bent (wat de blogpagina is, ook als dat niet de eerste pagina is) en dat de hoofdquery loopt (omdat je dit bijvoorbeeld niet in een widget wil doen). Zo ja, dan voegt het zowel berichten als boeken (het nieuwe post type) toe aan de query.
Let er wel op dat je ook het “post” post type moet toevoegen aan de array, naast je nieuwe post type.
Samenvatting
WordPress custom post types zijn een feature die van WordPress een echt content management system maken in plaats van alleen een blogplatform. Ze laten je complexe, luxe websites maken die zich gedragen als winkels, referentie-hubs, media-websites, of eigenlijk wat je ook maar nodig hebt.
Je kunt custom post types op drie manieren toevoegen aan je WordPress-website. Je kunt een plugin zoals WooCommerce gebruiken die zelf een custom post type aanmaakt die nodig is voor de functionaliteit van de plugin. Je kunt een plugin zoals CPT UI of Pods gebruiken om je eigen post types toe te voegen. Of je kunt je eigen plugin schrijven en de register_post_type()
functie gebruiken om zelf je post type te programmeren. Welke methode je ook gebruikt, ze zullen je helpen nog meer uit je WordPress-website te halen.
Heldere uitleg. Dank je wel.
Is het mogelijk om custom post types die je met een plug-in hebt gemaakt, over te nemen in een andere plug-in?
Bijvoorbeeld als je wil overstappen van plug-in om cpt’s te maken en beheren.
@Patrick,
dat ligt aan de manier waarop deze custom post types zijn aangemaakt. Als je de plugin deactiveert, zijn de CPTs er dan nog? Als het antwoord op deze vraag nee is, dan moet je de CPTs in een eigen plugin zetten, of je functions.php gebruiken om de CPTs daarin te zetten.