Een permalink is een link die je kan gebruiken om een gebruiker naar een specifieke plek op je site te sturen.

De homepagina van Kinsta is bijvoorbeeld te vinden op https://kinsta.com/, onze blog op https://kinsta.com/blog/ en een individueel artikel gebruikt een link zoals https://kinsta.com/blog/wordpress-widgets/.

Permalinks worden daarnaast gebruikt voor archiefpagina’s, statische pagina’s en alle content binnen je site die een eigen URL nodig heeft.

In dit artikel laten we zien hoe permalinks werken, hoe je ze op je website kan optimaliseren en hoe je ze – met code of via de instellingen – kan configureren.

Wat zijn WordPress permalinks?

WordPress permalinks worden gedefinieerd in de officiële WordPress Codex als:

“De permanente URL’s naar je individuele weblogartikelen, categorieën en andere lijsten met weblogcontent.”

Elke pagina binnen je website (dus artikelen, pagina’s, archiefpagina’s en bijvoorbeeld de 404 pagina) zal een eigen permalink hebben.

Zo zal je homepage bijvoorbeeld te vinden zijn op jouwsite.com, terwijl je blog zich op jouwsite.com/blog bevindt.

Als je een categorie “featured” hebt binnen je blog, kan die op verschillende URL’s te vinden zijn:

  • jouwsite.com/categorie/featured
  • jouwsite.com/blog/featured of gewoon
  • jouwsite.com/featured.

Individuele artikelen hebben ook hun eigen permalink. Binnen de templatebestanden van je thema wordt de template-tag the_permalink() gebruikt om de URL van een artikel op te halen en daar een klikbare link van te maken.

WordPress gebruikt dit om de unieke permalink voor het artikel op te halen, en vervolgens met een <a> element terug te sturen zodat het als link gebruikt kan worden in een lijst met artikelen.

Het mooie van deze template tag is dat je maar één stukje code hoeft te gebruiken om de link van elk artikel binnen je website op te halen. En je hoeft ook geen links binnen je thema te hardcoden.

Het verschil tussen permalinks, slugs en links

In dit artikel hebben we het vooral over permalinks, maar we zullen ook naar slugs kijken. Wat is nou precies het verschil?

De permalink is een volledige link naar een artikel. Bijvoorbeeld de link die ik eerder noemde naar een Kinsta artikel over widgets: https://kinsta.com/blog/wordpress-widgets/.

De slug is het laatste deel van de permalink en is uniek voor dat artikel. In dit voorbeeld dus wordpress-widgets.

De slug wordt automatisch gegenereerd op basis van de titel. Maar als je liever handmatig een slug maakt voor een artikel kan dat ook. Ik zal je verderop in dit artikel laten zien hoe je dat doet en waarom je dat zou willen.

Hoe maak je WordPress permalinks?

Binnen een statische website identificeert een URL een bron door middel van de naam en het bestandspad, zoals hieronder te zien:

https://example.com/path/to/resource/wordpress-permalinks.html

Om goed gestructureerde URL’s te krijgen hebben we dus alleen maar een goed gestructureerd bestandssysteem nodig, met goed benoemde bronnen.

Maar tegenwoordig is het web dynamischer dan ooit. Als je een site beheert, is de kans heel groot dat je een database-driven CMS gebruikt. Dat betekent dat URL’s allerlei parameters kunnen bevatten. Deze parameters zijn zogenaamde query’s, aanvragen, die bij de database worden ingediend.

Kijk maar eens naar dit voorbeeld:

https://example.com/?key1=val1&key2=val2

In deze URL zie je een scheidingsteken (het vraagteken) en een aantal key-value paren (gescheiden door een en-teken), die samen een query string vormen. De URL voldoet duidelijk niet aan de toegankelijkheids- en gebruikseisen en zou veranderd moeten worden in een beter leesbare en SEO vriendelijke permalink.

Hoe je deze “lelijke” URL’s kunt veranderen naar geoptimaliseerde permalinks hangt af van je webserver. Als je Apache gebruikt, zul je een aantal rewrite directives moeten toevoegen aan het .htaccess bestand van de hoofdmap. Als je Nginx gebruikt, dan zou je een try_files directive moeten toevoegen aan het instellingenbestand.

Maar geen zorgen! Over het algemeen hoef je niet zelf de webserver regel voor regel te configureren. WordPress doet dat namelijk voor je!

Als sitebeheerder kun je eenvoudig aangepaste rewrite-regels instellen in het beheerderspanel. Gevorderde gebruikers en developers kunnen nog meer doen, dankzij de WordPress Rewrite API, waarmee je functions en hooks kunt gebruiken. Hiermee maak je het aanpassen van permalinks nog een stapje geavanceerder.

Een overzicht van WordPress query’s

Maar hoe zorgt WordPress dat query’s kunnen worden opgebouwd, dat ze worden uitgevoerd en dat de resultaten uit de WordPress database worden opgeslagen? Nou, daarvoor is de WP_Query class in het leven geroepen. Dankzij deze class hoeven sitebeheerders niet veel met query’s bezig te zijn. WP_Query handelt elke query/verzoek automatisch af, bouwt query’s op en voert ze uit. Na dit proces stuurt WordPress de gevraagde bron terug volgens de template-hiërarchie.

Standaard staat WordPress query’s toe voor individuele artikelen/pagina’s en artikeltypen. Ook kan het platform overweg met een aantal archieven, gesorteerd op onder meer categorie, tag, datum of auteur.

Als de standaardfunctionaliteit niet toereikend is, kunnen developers ook nog custom query’s bouwen door nieuwe instances van de WP_Query class (het query object) te maken of door specifieke parameters door te geven aan een bestaande instance.

De queryparameters heten query variabelen en zijn onderverdeeld in drie groepen.

Public query variabelen

Deze variabelen zijn openbaar in zo verre dat ze beschikbaar zijn binnen openbare verzoeken (zoals de URL’s). Dankzij deze variabelen kunnen we bijvoorbeeld artikelen per auteur opvragen:

?author=12?
author_name=mickey

Of per categorie of tag:

?cat=4,5,6
?category_name=CMS
?tag=wordpress

Voor datum en tijd:

?monthnum=201601
?year=2015?w=13
?day=31

Per artikel of pagina:

?p=123
?name=hello-world
?page_id=234

En nog veel meer.

Private query variabelen

Deze variabelen zijn niet bedoeld als toevoeging aan URL query strings. Ze kunnen wel gebruikt worden om query’s te veranderen binnen een script (zoals het functions.php bestand van een plugin of thema).

De volgende query string zou daardoor niet het verwachte resultaat opleveren:

?meta_key=city&meta_value=London

meta_key en meta_value zijn variabelen voor private query’s die niet gedefinieerd kunnen worden in query strings. Ze moeten doorgegeven aan een instance van het query object, zoals ik later zal laten zien.

Zie de Codex voor de volledige lijst van variabelen voor public en private query’s.

Custom query variabelen

Deze variabelen worden door de gebruiker gedefinieerd en kunnen net als public query variabelen worden doorgegeven via URL query strings. Het grootste verschil tussen public en custom variabelen is dat WordPress zelf geen custom variabelen afhandelt, en we de waarden dus van een plugin moeten krijgen die query’s zelf aanpast.

Nu we dat weten, kunnen we terug naar permalinks.

Lelijke WordPress permalinks en query variabelen

Lelijke permalinks laten de query string zien, oftewel het deel van de URL met een aantal query variabelen die de uiteindelijke bron bepalen.

Standaardinstelling in het Permalinks instellingenvenster
Standaardinstelling in het Permalinks instellingenvenster

Bekijk ter illustratie de volgende URL’s eens:

https://example.com/?cat=5
https://example.com/?cat=5,7,9

WordPress zou op deze URL’s de archieven met artikelen leveren die horen bij de genoemde categorieën.

We kunnen meer dan één parameter per URL doorgeven. In de volgende voorbeelden bouwen we ingewikkelder query’s:

?author_name=lucy&category_name=WebDev?tag=wordpress&m=201606

In de eerste query string zorgen de variabelen author_name en category_name ervoor dat alle artikelen van die auteur binnen WebDev getoond worden. In de tweede query string, zorgen ‘tag’ en ‘m’ er samen voor dat alle artikelen tevoorschijn komen die getagd zijn als “wordpress” en gepubliceerd zijn in juni 2016.

Zo zie je dat we dus meer dan één query variabele kunnen gebruiken, en we WordPress geavanceerde query’s kunnen laten draaien door de juiste key-value paren toe te voegen aan de query string.

Mooie permalinks: een beter alternatief

Door mooiere permalinks in te schakelen krijgen we een leesbare, toegankelijke en SEO-vriendelijke URL structuur. Vergelijk deze URL’s eens:

https://example.com/?p=123
https://example.com/wordpress-permalinks/

In dit voorbeeld laat de lelijke permalink de inhoud van de ‘p’ variabele (het ID) zien, terwijl de mooie URL de slug van het artikel laat zien.

WordPress biedt vier formats voor mooie permalinks waar we uit kunnen kiezen in het instellingenvenster voor permalinks, zoals hieronder te zien.

Pretty permalinks binnen de instellingen voor permalinks
Pretty permalinks binnen de instellingen voor permalinks

Maar je hoeft je niet te beperken tot de standaard formats, aangezien WordPress het mogelijk maakt het format voor permalinks aan te passen door één of meer structure tags te gebruiken.

Mogelijkheden voor custom structure tags
Mogelijkheden voor custom structure tags

Verderop in het artikel zal ik daar verder op ingaan.

Waarom zijn mooie permalinks belangrijk?

Mooie permalinks gebruiken binnen je WordPress website levert twee grote voordelen op: SEO en gebruikerservaring (UX).

Waarom? Zoekmachines beschouwen je URL als eerste aanwijzing waar het artikel over gaat. Als de content van de permalink over hetzelfde gaat als de content van je artikel, helpt dat de zoekmachines bij het bepalen van het onderwerp van je artikel. Idealiter komt het onderwerp van beide dus overeen.

Ook voor de gebruikerservaring zijn mooie permalinks beter. Ze zijn voor bezoekers makkelijker te onthouden en te gebruiken. Niemand onthoudt de URL van je contactpagina als deze jouwsite.com/?p=456 is. Maar jouwsite.com/contact is een heel ander verhaal.

Permalinks, slugs, en SEO

De slug van een artikel is het laatste stukje van de URL. Wanneer je de instellingen voor WordPress permalinks zo hebt geconfigureerd dat de naam van het artikel wordt gebruikt, is jouwsite.com/zo-maak-je-mooie-permalinks/ bijvoorbeeld de slug van een artikel dat “Zo maak je mooie permalinks” heet.

Dat is een prima slug. Gebruikers weten immers waar het artikel over gaat, en zoekmachines zien dat er “mooie permalinks” in staat, wat het keyword is waarmee jij waarschijnlijk bezoekers wil aantrekken.

Maar het kan nog beter.

Je slugs moeten lang genoeg zijn voor de belangrijkste keywords, maar kort genoeg om te onthouden. Ook moeten ze zoekmachines niet verwarren met onnodige woorden (zo maak je SEO-vriendelijke permalinks in WordPress).

Een artikel dat “Zo maak je mooie permalinks” heet, kan dus beter een slug zoals mooie-permalinks gebruiken, waarmee de volledige link dus jouwsite.com/mooie-permalinks/ wordt. Of als je meerdere artikelen over mooie permalinks hebt geschreven en je deze een specifieke slug wil geven die duidelijk maakt dat het om een handleiding gaat, dan kun je mooie-permalinks-maken gebruiken, met als volledige link: jouwsite.com/mooie-permalinks-maken.

Je kan de SEO nog verder verbeteren door ook ‘WordPress’ te noemen: voorbeeld.com/mooie-wordpress-permalinks-maken.

Wanneer mensen je link zien in een zoekresultaat, wil je voorkomen dat het resultaat te lang is en niet helemaal wordt weergegeven. Hieronder zijn twee resultaten te zien van het Kinsta blog wanneer ik zoek op “wordpress permalinks”.

Google resultaat – WordPress permalinks
Google resultaat – WordPress permalinks

Dit zijn allebei goed geoptimaliseerde slugs. De eerste is wordpress-permalinks-url-rewriting, wat dus over die keywords zal gaan, en de tweede is wordpress-slug, wat dus een nog sterkere focus heeft.

Deze slugs gebruiken alle woorden erg effectief. Ze vertellen een zoekmachine precies waar het artikel over gaat, en niet meer dan dat.

Je kan je slugs optimaliseren voor SEO door Berichtnaam te selecteren in de instellingen voor permalinks en vervolgens de slug van elk artikel handmatig aan te passen wanneer je het geschreven hebt.

Permalinks, slugs en UX

Door goede permalinks te gebruiken in combinatie met korte, duidelijke slugs, zal je een betere gebruikerservaring (UX) krijgen.

Volgens een artikel uit 1999 van Jacob Nielsen vereist een bruikbare website:

  • Een domeinnaam die makkelijk te onthouden en te spellen is.
  • Korte URL’s.
  • Makkelijk te typen URL’s.
  • URL’s die de structuur van een website laten zien.
  • URL’s die gebruikers zelf makkelijk op kunnen delen zodat ze op een hoger niveau in de architectuur uitkomen.
  • Blijvende URL’s die niet veranderen.

Een URL zou nooit moeten veranderen, aangezien deze opgeslagen en gedeeld kan worden. We noemen ze natuurlijk niet voor niets permalinks. Verder moet een URL semantisch zijn, oftewel ze moeten direct en eenvoudig te begrijpen zijn voor gebruikers.

Alhoewel het dus prima mogelijk is om de permalink van een artikel te veranderen nadat je deze gepubliceerd hebt, is dat een slecht idee. Dat komt omdat de originele permalink misschien inmiddels wel gedeeld kan zijn door je bezoekers. Als je het tóch wil veranderen, let er dan op dat je de WordPress redirect best practices volgt.

Hoe verander je de instellingen van permalinks in WordPress?

Je kan de permalinks op diverse manieren veranderen binnen WordPress:

  • Je kan de instellingen van permalinks veranderen zodat mooie permalinks aan staan – iets dat je meteen moet doen zodra je een website begint.
  • Je kan de permalinkstructuur voor tags en categorieën aanpassen binnen het permalinksvenster.
  • Je kan de slugs van individuele artikelen veranderen tijdens het maken van een artikel.
  • Je kan de linkstructuur van aangepaste berichttypes specificeren tijdens het aanmaken hiervan, waarbij je voor de standaard kunt kiezen of iets anders.
  • Je kan een plugin schrijven om de manier waarop permalinks gestructureerd zijn, te veranderen.
  • Je kan redirects gebruiken om een verouderde permalink naar een nieuwe te laten verwijzen.

Laten we deze opties eens bekijken.

Bewerken van de algemene instellingen voor permalinks

Het instellingenscherm voor permalinks is de beste plek om permalinks te configureren. Je vindt deze onder Instellingen > Permalinks.

Instellingenscherm voor permalinks
Instellingenscherm voor permalinks

Algemene instellingen

Het eerste deel gaat over de instellingen voor individuele artikelen. De keuzes zijn:

  • Standaard: dit gebruikt de Post ID voor de link. Browsers zullen het wel begrijpen, maar mensen niet, en zoekmachines ook niet. Het ziet er zo uit: voorbeeld.com/?p=123.
  • Jaar, maand, dag en naam: Dit gebruikt de volledige datum waarop het artikel gepubliceerd werd, samen met de naam (of de slug, om precies te zijn). Dat ziet er zo uit: voorbeeld.com/2020/06/01/mijn-bericht/.
  • Jaar, maand en naam: Dit is een kortere versie van de datum, met alleen de maand en jaar: voorbeeld.com/2020/06/mijn-bericht/.
  • Numeriek: Hetzelfde als de optie Standaard. Hier wordt het ID van het artikel gebruikt, niet erg gebruiksvriendelijk: voorbeeld.com/archief/123.
  • Berichtnaam: Deze optie bevat geen datums of nummers, maar alleen de slug: voorbeeld.com/mijn-bericht/.
  • Aangepaste structuur: hier kun je je eigen structuur aanmaken. Gebruik tags om informatie op te halen op basis van data van specifieke berichten (bijvoorbeeld titel of auteur) en statische tekst wat niet verandert bij de artikelen.

Onderstaande tags zijn specifieke keywords die je moet plaatsen binnen de %-symbolen. WordPress biedt de volgende tags:

  • %year% – het jaar van publicatie van het artikel (vier cijfers).
  • %monthnum% – maand van publicatie (twee cijfers).
  • %day% –dag van publicatie (twee cijfers).
  • %hour% – uur van publicatie (twee cijfers).
  • %minute% – minuut van publicatie (twee cijfers).
  • %second% – seconde van publicatie (twee cijfers).
  • %post_id% – unieke ID van het artikel (geheel getal).
  • %postname% – slug van het artikel, oftewel de vereenvoudigde string met de titel.
  • %category% – de slug met de categorie.
  • %author% – de slug met de auteur.

Probeer eens Aangepaste structuur aan te vinken en één van de volgende strings toe te voegen aan het tekstveld:

  • /%author%/%postname%/
  • /%year%/%postname%/
  • /%category%/%postname%/

Deze genereren allemaal een andere, mooie permalink met specifieke semantische waarden, zoals hieronder te zien:

example.com/rachelmccollin/wordpress-permalinks/
example.com/2020/wordpress-permalinks/
example.com/CMS/wordpress-permalinks/

In het eerste voorbeeld benadrukt de URL de auteur van het artikel. De andere twee formats laten respectievelijk het jaar van publicatie en de categorie zien. Je kunt zelf kiezen welk format het beste bij jou past.

Na het kiezen van beste optie, kun je naar de sectie ‘Optioneel’ gaan of klikken op Wijzigingen opslaan om alles op te slaan.

Optionele instellingen voor permalinks

Naast de instellingen voor individuele artikelen, biedt het instellingenscherm voor permalinks ook opties om een aangepaste structuur te maken voor je categorie- en tagarchieven.

Doe je dit niet, dan is de standaardinstelling het opnemen van /category/categorie-slug/ aan het einde van de permalink. Wanneer je dus een categorie “featured” hebt, zal de archiefpagina daarvan te vinden zijn op jouwsite.com/category/featured.

Optionele instellingen voor permalinks
Optionele instellingen voor permalinks

Je kunt dit veranderen binnen de sectie “Optioneel” van de permalinks instellingenpagina. Als je jouwsite.com/blog/featured/ wilt als permalink voor het archief van die categorie, voer je blog in bij het veld Categoriebasis. Je hoeft verder geen tags toe te voegen of backslashes te gebruiken.

Zo verander je permalinks en slugs voor individuele artikelen en pagina’s

Nadat je mooie permalinks hebt geactiveerd op je WordPress website, is het tijd om de slugs voor individuele artikelen en pagina’s te optimaliseren.

Het ideale moment om dat te doen is tijdens het creëren van je content. Wanneer je de slug van een artikel verandert, verander je ook de gebruikte URL. De links die je bezoekers dan al hebben gedeeld, werken dus niet meer.

Om een slug te veranderen, ga je naar de bewerkingspagina van dat artikel. Ga naar Berichten en selecteer het artikel dat je wil veranderen. (Als je momenteel bezig bent om het artikel te maken, zit je al in op de goede plek.)

In dit venster selecteer je het Document panel aan de rechterkant en ga je naar de sectie Permalink. Klik op het pijltje rechts daarvan, als dit nog niet geopend is.

Bewerken van permalinks binnen het bewerken van een artikel
Bewerken van permalinks binnen het bewerken van een artikel

De automatisch gemaakte slug zal te zien zijn in het URL slug veld. Hier kun je de slug bewerken door deze in te korten.

Voordat je de slug bewerkt, is het slim de slug ergens naartoe te kopiëren, mocht je deze alsnog later nodig hebben voor het instellen van een redirect (dit geldt alleen voor al gepubliceerde artikelen).

Bewerkte slug
Bewerkte slug

Klik vervolgens op Publiceren of Bijwerken om de veranderingen op te slaan en/of te publiceren.

Niet vergeten: nadat je slug van een bestaand artikel hebt veranderd, kunnen de mensen die de oude link gebruiken het artikel niet meer vinden. Je moet dus redirects instellen.

Zo verander je de instellingen voor permalinks van archiefpagina’s

Om de instellingen voor permalinks van individuele archiefpagina’s te veranderen, kun je de instellingen bewerken in het instellingenscherm voor permalinks voor de “category” of “tag”. Ook kan je de slug van een individuele categorie, tag of custom taxonomie aanpassen.

Laten we eerst kijken hoe je dat doet en vervolgens kijken naar hoe je de permalink van aangepaste taxonomieën en berichttypen verandert tijdens het aanmaken hiervan.

Veranderen van slugs voor categorieën en tags

Om dit te doen ga je naar Berichten > Categorieën (of Berichten > Tags).

Instellingen voor categorieën
Instellingen voor categorieën

Zoek de categorie of slug die je wilt bewerken en klik op de naam.

Bewerken van een slug van een categorie
Bewerken van een slug van een categorie

Je kunt vervolgens zelf een slug intypen voor de categorie of tag. WordPress maakt automatisch een slug aan op basis van de naam van de categorie of tag, maar dit hoef je niet aan te houden. Net als met artikelen: het meest logische moment om dit te doen, is wanneer je er een aanmaakt. Doe je het op een later moment, dan zul je een redirect in moeten stellen.

Wanneer je een aangepaste taxonomie aanmaakt, of je een plugin dat laat doen, dan kun je de slugs voor de individuele termen binnen de taxonomie op dezelfde manier aanpassen. Maar als je de slug voor de taxonomie zelf wil aanpassen, zul je wat code moeten wijzigen.

Slugs voor aangepaste taxonomieën veranderen

Wanneer je een aangepaste taxonomie registreert, zullen de archiefpagina’s daarvoor automatisch de URL jouwsite.com/taxonomy/term krijgen, waarbij taxonomy het ID van de taxonomie is, en term de slug voor de term.

Stel je voor dat je een aangepaste taxonomie registreert voor taal met de ID kinsta_taal, waarbij je een voorvoegsel gebruikt om ervoor te zorgen dat het niet identiek is aan een taxonomie van een plugin. Je maakt vervolgens een term aan met de slug frans.

De URL voor dat archief zou dan jouwsite.com/kinsta_taal/frans worden.

Maar wat als je dat nou wilt veranderen naar een meer gebruiksvriendelijke URL? Dat doe je via een rewrite argument wanneer je de taxonomie registreert.

Je zou daarvoor de volgende code kunnen gebruiken bij het registreren van de taxonomie, inclusief het rewrite argument.

function kinsta_register_taxonomy() {                

 // languages
 $labels = array(
  'name'=> __( 'Languages' ),
  'singular_name' => __( 'Language' ),
  'search_items' => __( 'Search Languages' ),
  'all_items' => __( 'All Languages' ),
  'edit_item' => __( 'Edit Languages' ),
  'update_item' => __( 'Update Languages' ),
  'add_new_item' => __( 'Add New Language' ),
  'new_item_name' => __( 'New Language Name' ),
  'menu_name' => __( 'Languages' ),
 );

 $args = array(
  'labels' => $labels,
  'hierarchical' => true,
  'sort' => true,
  'args' => array( 'orderby' => 'term_order' ),
  'rewrite' => array( 'slug' => 'language' ),
  'show_admin_column' => true,
  'show_in_rest' => true
 );

 register_taxonomy( 'kinsta_language', array( 'post', 'attachment' ), $args);   

}

add_action( 'init', 'kinsta_register_taxonomy' );

De belangrijke regel in deze code is de volgende:

'rewrite' => array( 'slug' => 'language' ),

Hiermee herschrijf je de slug van kinsta_taal (het ID) naar taal (nieuwe waarde). Je nieuwe URL wordt dus jouwsite.com/taal/frans. Veel beter!

Zo verander je slugs voor aangepaste berichttypen

Aangepaste berichttypen werken op dezelfde manier als aangepaste taxonomieën wanneer je deze registreert, en ze zullen dus een URL hebben met het ID van het aangepaste berichttype erin.

Stel je voor dat je een aangepaste berichttype registreert met de naam kinsta_boek en je maakt vervolgens een artikel met dat type dat je ‘Huckleberry Finn’ noemt, met de slug huckleberry-finn.

De URL wordt dan jouwsite.com/kinsta_book/huckleberry-finn. De slug voor het archief van dat artikeltype zou jouwsite.com/kinsta_boek zijn.

Ook dit kun je veranderen op het moment dat je het type registreert, via het rewrite argument. De code daarvoor, weer inclusief het belangrijke argument:

function kinsta_register_post_type() {

 // books
 $labels = array(
  'name' => __( 'Books' ),
  'singular_name' => __( 'Book' ),
  'add_new' => __( 'New Book' ),
  'add_new_item' => __( 'Add New Book' ),
  'edit_item' => __( 'Edit Book' ),
  'new_item' => __( 'New Book' ),
  'view_item' => __( 'View Book' ),
  'search_items' => __( 'Search Books' ),
  'not_found' =>  __( 'No Books Found' ),
  'not_found_in_trash' => __( 'No Books found in Trash' ),
 );

 $args = array(
  'labels' => $labels,
  'has_archive' => true,
  'public' => true,
  'hierarchical' => false,
  'supports' => array(
   'title',
   'editor',
   'excerpt',
   'custom-fields',
   'thumbnail',
   'page-attributes'
  ),
  'taxonomies' => array( 'kinsta_language', 'category'),
  'rewrite'   => array( 'slug' => 'book' )
 );
 
 register_post_type( 'kinsta_book', $args );

}

add_action( 'init', 'kinsta_register_post_type' );

De belangrijk regel code voor de slug:

'rewrite'   => array( 'slug' => 'book' )

Nu zullen de URL’s respectievelijk jouwsite.com/boek/huckleberry-finn en jouwsite.com/boek zijn.

Bewerken van permalinks via aangepaste velden

Naast public en private query variabelen, staat WordPress developers en gevorderde gebruikers ook toe om hun eigen aangepaste query variabelen te definiëren. Nadat je deze geregistreerd hebt, kun je ze toevoegen aan query strings, net als public query variabelen, en kun je hun waarden gebruiken om query’s te veranderen.

Zo bouw je een aangepaste meta query (oftewel een query die artikelen ophaalt op basis van een aangepast veld) op basis van aangepaste query variabelen.

Om dit te bereiken, ontwikkelen we een plugin waarmee we aangepaste variabelen registreren, hun waarden ophalen, en de query vervolgens veranderen.

Zo doen we dat…

Maak een plugin in de map wp-content/plugins. Voeg een function toe om de query variabelen te registreren:

/**
 * Register custom query vars
 *
 * @param array $vars The array of available query variables
 */

function myplugin_register_query_vars( $vars ) {

 $vars[] = 'city';
 return $vars;

}

add_filter( 'query_vars', 'myplugin_register_query_vars' );

Het query_vars filter maakt het mogelijk om public query variabelen toe te voegen, te verwijderen of te veranderen voordat de query uitgevoerd wordt. De callback function in dit voorbeeld slaat het argument op als een array van de beschikbare variabelen, voegt een nieuwe variabele toe, en retourneert de volledige array.

Voeg vervolgens deze function toe die de waarde van de variabelen gebruikt om de query aan te passen:

/**
 * Build a custom query
 *
 * @param $query obj The WP_Query instance (passed by reference)
 *
 */

function myplugin_pre_get_posts( $query ) {

 // check if the user is requesting an admin page
 // or current query is not the main query
 if ( is_admin() || ! $query->is_main_query() ){
  return;
 }

 $city = get_query_var( 'city' );

 // add meta_query elements
 if( !empty( $city ) ){
  $query->set( 'meta_key', 'city' );
  $query->set( 'meta_value', $city );
  $query->set( 'meta_compare', 'LIKE' );
 }

}

add_action( 'pre_get_posts', 'myplugin_pre_get_posts', 1 );

De pre_get_postsaction hook wordt geactiveerd nadat de query wordt gemaakt, maar voordat deze wordt uitgevoerd. Daardoor kunnen we een callback function aan deze action hooken om de query te veranderen voordat deze uitgevoerd wordt. Dit is wat er gebeurt onder de motorkap:

  • De callback function bewaart een instance van het $query object, die doorgegeven wordt als reference, niet als value. Dat betekent dat eventuele veranderingen aan het query object de originele query verandert, en niet een kopie ervan. Daarom moeten we zeker weten welke query er uitgevoerd gaat worden (de main query).
  • Later ontvangen we de stad value van de huidige query string, dankzij de get_query_var function.
  • Tenslotte, als $city niet leeg is, kunnen we de meta query elementen meta_key, meta_value, en meta_compare instellen. Die laatsten zijn private query variabelen en dus niet beschikbaar voor publieke verzoeken. De values kunnen dan ook alleen ingesteld worden binnen het script.

Activeer nu de plugin en voeg het aangepaste veld ‘stad’ toe aan een paar artikelen. Ga naar Instellingen > Permalinks om de permalinks te verversen. Je hoeft daar zelf niks te doen, alleen naar het venster gaan.

Bekijk nu de URL’s, die zouden hierop moeten lijken:

https://example.com/?city=London

Als antwoord op deze query zou WordPress alle artikelen waarin het stad veld Londen is, terug moeten sturen.

Onze laatste taak is het omzetten van de lelijke URL uit dit voorbeeld naar een mooie permalinks. Daarvoor voegen we de volgende function toe aan onze plugin:

/**
* Add rewrite tags and rules
*/

function myplugin_rewrite_tag_rule() {

 add_rewrite_tag( '%city%', '([^&]+)' );
 add_rewrite_rule( '^city/([^/]*)/?', 'index.php?city=$matches[1]','top' );

}

add_action('init', 'myplugin_rewrite_tag_rule', 10, 0);

De add_rewrite_tag en add_rewrite_rule functions horen bij de Rewrite API. add_rewrite_tag maakt duidelijk aan WordPress dat de query variabele ‘stad’ bestaat, en add_rewrite_rule voegt een nieuwe specifieke regel voor het herschrijven toe. Beide functions moeten aan de init action gehookt worden. Dankzij deze nieuwe tag en nieuwe regel, kunnen we nu de volgende URL gebruiken:

https://example.com/city/London/

WordPress zal daar een archief van artikelen bieden waarvan het custom veld stad de waarde ‘Londen’ bevat.

Let op: elke keer dat er een nieuwe rewrite regel wordt toegevoegd, moeten de permalinks van WordPress ververst worden vanuit het Permalinks scherm onder de Settings in het admin menu.

Hoe verander je permalinks in WooCommerce?

WooCommerce maakt zelf aangepaste berichttypen en taxonomieën aan, die allemaal standaard permalinks hebben die door de plugin worden gedefinieerd.

Je kunt de instellingen voor de permalinks en slugs veranderen.

Veranderen van permalinks voor productcategorie, tag en eigenschappen

Er zijn twee aspecten aan het bewerken van permalinks voor productcategorieën, tags en eigenschappen: de structuur en de slug. Ze werken op dezelfde manier als normale categorieën en tags.

Om de structuur van de permalinks te veranderen ga je naar Instellingen> Permalinks en zoek je de sectie Optioneel, waar WooCommerce extra velden heeft toegevoegd.

Optionele permalinks instellingen wanneer WooCommerce geïnstalleerd is
Optionele permalinks instellingen wanneer WooCommerce geïnstalleerd is

Hier kun je de instellingen voor permalinks aanpassen voor de drie aangepaste taxonomieën de WooCommerce toevoegt:

  • Productcategorie afkorting: de standaard is /product-categorie/ maar je kunt dit veranderen als je een andere terminologie gebruikt binnen je webshop. Let erop dat je verandering geen conflict veroorzaakt met de instellingen voor normale categorieën. Ze zijn dus niet hetzelfde.
  • Producttag-basis: de standaard is /product-tag/ en dit kun je ook veranderen als je graag wilt. Ook hierbij moet je opletten dat je een conflict met tags van gewone berichten voorkomt.
  • Producteigenschap-basis: deze zijn anders dan de andere twee taxonomieën en hebben ook een andere structuur. Wat je hier ook toevoegt, het zal altijd gevolgd worden door de slug van de individuele eigenschap (bijv. maat) en de eigenschap zelf (de term, dus bijvoorbeeld ‘XL’).

Als je de slug van een individuele categorie of tag wilt aanpassen, ga je naar Producten > Categorieën (of Producten > Tags) en bewerk je die op dezelfde manier als voor tags en categorieën.

Bewerken van de slug voor productcategorie
Bewerken van de slug voor productcategorie

Het bewerken van eigenschappen is anders, omdat je niet alleen de eigenschap zelf hebt, maar ook de bijbehorende term.

Begin door naar Producten > Eigenschappen te gaan.

Product eigenschappen pagina
Product eigenschappen pagina

Wanneer je een nieuwe eigenschap aanmaakt, kun je het veld Afkorting gebruiken om de slug op dezelfde manier in te stellen zoals je dat zou doen bij een tag of categorie. In plaats daarvan kun je ook de slug voor een bestaande eigenschap bewerken, klik daarvoor op de Bewerken link onder het eigenschap, aan de rechterkant.

Bewerken van slugs voor product attribute
Bewerken van slugs voor product attribute

Klik op Bijwerken om je veranderingen op te slaan.

Om de slugs van eigenschaptermen te veranderen, ga je naar het eigenschappen-scherm en klik je op Voorwaarden instellen naast de eigenschap. Je krijgt dan een lijst met termen voor die eigenschap te zien.

Lijst met termen voor een product attribute
Lijst met termen voor een product attribute

Bewerk de slug voor deze term op dezelfde manier. Deze zal vervolgens toegevoegd worden aan de URL voor het archief van producten die deze term bevatten.

Veranderen van permalinks voor producten

Je kunt de permalinks voor producten bewerken via Instellingen > Permalinks. Scrol naar beneden tot het deel Product permalinks.

Product permalinks instellingen
Product permalinks instellingen

Hier kun je kiezen uit vier verschillende instellingen voor permalinks van je producten:

  • Standaard: als je al mooie permalinks gebruikt, zal deze instelling de slug van elk product gebruiken, met de /product/ als basis.
  • Winkelbasis: in plaats van /product/ zal je winkel /shop/ gebruiken.
  • Winkelbasis met categorie: voegt de categorie van het huidige product toe aan de URL. Deze kan keywords toevoegen die je wil targeten als je productcategorieën die bevatten. Door de lange URL’s is dit niet echt fijn wat betreft de UX.
  • Custom basis: Maak je eigen URL structuur met woorden die relevant zijn voor je webshop. Je kunt de basis niet helemaal verwijderen, je zult dus sowieso iets moeten kiezen.

Als je eenmaal hebt gekozen, klik je op Wijzigingen opslaan.

Je kunt de slug ook voor een individueel product aanpassen in het scherm waar je een product bewerkt, net zoals je dat zou doen voor een artikel of een pagina.

Zo verander je WordPress permalinks met een plugin

Je kunt ook een externe plugin gebruiken om je permalinks aan te passen, wat je meer opties geeft dan de standaard WordPress permalinkinstellingen.

Custom Permalinks WordPress plugin
Custom Permalinks WordPress plugin
  • De Custom Permalinks plugin maakt het mogelijk om de URL van elke categorie of tag in te stellen zoals jij dat wil. De plugin kan ook redirects instellen, zodat oude URL’s nog steeds werken.
  • De Permalink Manager Lite plugin ondersteunt aangepaste berichttypen en aangepaste taxonomieën in de pro versie. Het bevat ook redirects en werkt met externe plugins zoals WooCommerce en Yoast.

Zo verander je WordPress permalinks in phpMyAdmin

Als je weet wat je doet en helemaal zeker weet dat je niks kapot gaat maken, kun je permalinks ook aanpassen via phpMyAdmin.

Dit is vooral een goede optie als je om één of andere reden niet bij de normale instellingen voor Permalinks kan.

Begin zoals altijd met het maken van een back-up van je database. Je brengt rechtstreeks wijzigingen aan in de database, dus zorg dat je een goede en volledige back-up hebt, mocht er iets misgaan.

Ga naar phpMyAdmin.

Klanten van Kinsta kunnen dit doen door in te loggen op MyKinsta en de gewenste site te selecteren.

Scrol naar beneden in het info scherm en klik op phpMyAdmin openen.

Open phpMyAdmin in MyKinsta
Open phpMyAdmin in MyKinsta

Type de gebruikersnaam en wachtwoord voor je database in om phpMyAdmin te openen. Deze kun je vinden in het info scherm.

Klik op het tabblad Databases en selecteer de gewenste database.

Database structuur in phpMyAdmin
Database structuur in phpMyAdmin

Selecteer de wp_options tabel en zoek de entry permalink_structure in de kolom option_name. Dit kan op de tweede of derde pagina met entry’s te vinden zijn.

Vinden van de entry permalink_structure
Vinden van de entry permalink_structure

Klik op de link Edit van de entry, en dan onder het option_value veld kun je de permalink structuur toevoegen die je wilt gebruiken. Gebruik de tags die we eerder noemden.

Bewerken van de permalink structuur.
Bewerken van de permalink structuur.

Klik op Go. Je permalinks worden nu bijgewerkt.

Lees voor meer informatie ons artikel: Zo verander je je WordPress URL of video:

Werken met permalinks van afbeeldingen

Afbeeldingen hebben hun eigen permalinks en elke afbeelding die je uploadt naar je site zal een aantal links krijgen:

  • De link naar de afbeelding die je uploadt – de originele afbeelding.
  • Links voor nieuwe afbeeldingen die gemaakt worden voor de verschillende maten van verschillende media, zoals je instelt via Instellingen > Media.

De link naar de originele afbeelding

Wanneer je een afbeelding uploadt, zal er een unieke link aangemaakt worden naar het bestand zoals het op de server wordt opgeslagen. Dit bevat een bestandspad naar waar het precies opgeslagen is, namelijk in wp-content/uploads.

Het bevat ook de datum waarop je de afbeelding hebt toegevoegd. Dit betekent dat als je volgende maand nog een andere afbeelding uploadt met dezelfde bestandsnaam, de afbeeldingen allebei hun eigen bestandspaden krijgen.

Als je dus een afbeelding met de naam funnycat.jpg zou uploaden op 1 april 2020, wordt de link jouwsite.com/wp-content/uploads/04/funnycat.jpg. De 04 betekent dat het bestand in april is toegevoegd. WordPress maakt voor elke maand een genummerde map aan binnen de uploads map.

Ook als het bestand geen afbeelding was, zou de URL op dezelfde manier gemaakt worden: jouwsite.com/wp-content/uploads/04/document.pdf.

Als je meer dan één bestand met dezelfde bestandsnaam uploadt binnen dezelfde maand, voegt WordPress automatisch een getal toe aan het einde van de bestandsnaam. Als ik dus nog een afbeelding met de naam funnycat.jpg uploadt, wordt dit funnycat-1.jpg.

Mocht je ooit nog de link naar het originele bestand nodig hebben, dan kun je die dus zo vinden.

Je kunt de link naar de bijlage ook vinden door naar Media > Library te gaan en op het bestand te klikken. Je zult dan het instellingenscherm zien voor dat bestand en daar staat de URL onder Bestand URL aan de rechterkant.

Originele link naar de afbeelding
Originele link naar de afbeelding

Je kunt ook naar het bestand linken via de wp_get_attachment_image() function van WordPress. Dit is iets beter, aangezien de URL niet verandert mocht de bijlage ooit nog verplaatst worden. Deze function zou je ook in een plugin of thema kunnen gebruiken en gebruikt het unieke ID van een bijlage.

In het geval van mijn afbeelding funnycat.jpg is het ID 4995. Dat kan ik vinden door naar het instellingenscherm van de afbeelding te gaan en op de URL te klikken bovenaan de browser. De laatste cijfers zullen het ID zijn.

Om deze afbeelding op te halen in een templatebestand of plugin, zou ik deze code gebruiken:

<?php wp_get_attachment image( ‘4995’ ); ?>

Dit laadt de afbeelding op volledige grootte. Als ik het ook zou willen weergeven zou ik echo toevoegen:

<?php echo wp_get_attachment image( ‘4995’ ); ?>

Permalinks naar afbeeldingen met andere afmetingen

WordPress maakt ook afbeeldingen via de instellingen voor de afmetingen zoals je die hebt geconfigureerd voor je site. Je doet dit via Instellingen > Media.

Instellingen voor media
Instellingen voor media

Als je afbeelding dus al groter is dan de instellingen voor ‘large’, zal WordPress drie afbeeldingen maken: large, medium en thumbnail.

De afbeelding zelf wordt niet naar deze groottes hernoemd, omdat je wellicht de afbeelding in de toekomst wil wijzigen. In plaats daarvan gebruiken de nieuwe afbeeldingen de afmetingen in de bestandsnaam en wordt het bestand op dezelfde plek als de originele afbeelding opgeslagen, in de map met de maand, onder wp-content/uploads.

De makkelijkste manier om de links te vinden is door naar je FTP client te kijken en alle afbeeldingen erbij te pakken die je in een bepaalde maand hebt toegevoegd.

Toegevoegde afbeeldingen in de FTP client
Toegevoegde afbeeldingen in de FTP client

Laten we de afbeelding funnycat.jpg nemen die ik naar mijn site heb geüpload. Je kunt deze zien in het screenshot.

WordPress heeft ook extra bestanden gemaakt op basis van de afmetingen:

  • funnycat-150×150.jpg
  • funnycat-222×300.jpg
  • funnycat-300×200.jpg
  • funnycat-757×1024.jpg
  • funnycat-768×1040.jpg
  • funnycat-1135×1536.jpg
  • funnycat-1513×2048.jpg

Er staan hier meer variaties dan de standaard, omdat ik plugins gebruik die andere formaten van de afbeeldingen gebruiken, en omdat ik nog een aangepast formaten heb ingesteld voor één van mijn paginatemplates binnen het thema. Je kunt de link naar één van deze bestanden als harde link gebruiken als je zou willen.

Maar een betere optie is door de wp_get_attachment_image() functie te gebruiken die we eerder al besproken hebben, en een extra parameter daaraan toe te voegen voor de afmetingen.

Om dus de afbeelding met de medium grootte te krijgen, gebruik je:

<?php echo wp_get_attachment image( ‘4995’, ‘medium’ ); ?>

Dit is een veel beter manier om de afbeelding te laden dan een hard link in je code te gebruiken.

Zo redirect je permalinks voor verschillende typen content

Het bewerken van de slug van een bestaand artikel, of het veranderen van de algemene permalinkinstellingen, kan problemen opleveren met eerder gedeelde artikelen. Als iemand op de oude links klikt, zullen ze op een 404-pagina uitkomen.

Dit los je op door redirects aan te maken voor de oude links.

Redirecten van individuele artikelen en pagina’s

Om de oude slug van een artikel te laten verwijzen naar een nieuwe, moet je een redirect regel aanmaken voor die twee URL’s.

Bij Kinsta kun je redirectregels aanmaken binnen het MyKinsta dashboard.

Zoek je site, en klik op de optie Redirects in het menu.

Redirects in MyKinsta
Redirects in MyKinsta

Klik op Een redirect toevoegen om de pop-up voor redirectregels te openen.

MyKinsta add redirect rule
MyKinsta add redirect rule

Om je redirect toe te voegen, selecteer je 301 redirect en voeg je de oude slug in bij Redirect van en de nieuwe bij Redirect naar.

Klik op Redirect toevoegen en klaar is Kees.

Als je niet bij Kinsta zit, kun je een redirection plugin gebruiken om redirects in te stellen. De plugin Redirection is het meest populair. Hiermee kun je handmatig redirects aanmaken en veranderingen aan je slugs monitoren. De plugin kan ook automatisch redirects voor je aanmaken. Wees voorzichtig om redirectloops te vermijden, omdat deze resulteren in de ‘too many redirects‘ fout, waardoor pagina’s niet kunnen worden geladen.

Hieronder zie je dat de plugin heeft geregistreerd dat ik de slugs van één van mijn artikelen heb veranderd, en de plugin heeft meteen een redirect regel aangemaakt.

Redirect plugin redirect regel instellen
Redirect plugin redirect regel instellen

Redirecten van archiefpagina’s

Als je de structuur van je archiefpagina’s verandert via de sectie Optioneel – onderin de instellingen van permalinks – zullen mensen die de oude link gebruiken op een 404-pagina uitkomen. Je moet daarom een wildcard redirect instellen.

Binnen MyKinsta maak je een redirect regel die de oude en nieuwe basisstructuren gebruikt, waarbij je een asterisk * toevoegt als wildcard.

In het veld Redirect van type je het oude bestandspad naar de categorieën, inclusief wildcard. Dit moet de vorm /oudeslug/(.*)$ hebben. De entry voor Redirect naar moet er ongeveer zo uitzien: /nieuweslug/$1.

Als je dus de structuur hebt veranderd om blog te gaan gebruiken in plaats van de standaard category, vul je  /category/(.*)$ in bij Redirect van en  /blog/$1 bij Redirect naar.

Toevoegen van een wildcard redirect-regel via MyKinsta
Toevoegen van een wildcard redirect-regel via MyKinsta

Als je de Redirection plugin gebruikt, zul je eerst de Regex functions in moeten schakelen, aangezien de wildcard een Regex function is.

Ga naar Gereedschap > Redirection en dan naar Add new redirection.

Maken van een nieuwe redirect regel met de Redirection plugin
Maken van een nieuwe redirect regel met de Redirection plugin

Klik op het dropdownmenu URL Options/Regex en vink het vakje voor Regex aan.

Instellen van een wildcard redirect met de Redirection plugin
Instellen van een wildcard redirect met de Redirection plugin

Bekijk onze videogids met best practices voor redirects binnen WordPress:

Bij Source URL voeg je het oude bestandspad naar de categorieën toe, inclusief wildcard. Dit moet de vorm /oudeslug/(.*)$ hebben. De entry voor Target URL moet er ongeveer zo uitzien: /nieuweslug/$1. Dit werkt net zoals bij MyKinsta.

Problemen met WordPress permalinks oplossen

Het kan weleens gebeuren dat permalinks niet zo werken als je zou verwachten. Dit moet je in zo’n geval doen.

Permalinks die niet werken nadat je een berichttype hebt geregistreerd.

Soms registreer je een nieuw berichttype of taxonomie, maar werken de links naar de relevante archiefpagina’s niet.

Geen zorgen! Dit komt doordat WordPress niet weet dat het aangepaste berichttype of taxonomie betekent dat de permalink instellingen ook veranderd zijn. Ga gewoon naar Settings > Permalinks waardoor de instellingen ververst worden. Je hoeft niks te doen, niet eens op Save Changes te klikken, alleen even naar de pagina gaan is genoeg.

Permalinks werken niet zoals je wilt

Als je permalinks niet werken op de manier zoals je verwacht had en het komt niet door het registreren van een aangepaste berichttype of taxonomie, probeer dan de volgende tips.

  • Controleer dat je de URL juist hebt ingevoerd.
  • Ga naar Instellingen > Permalinks en controleer de instellingen. Zijn de tags correct? Let erop dat je niks hebt gemist of een verkeerde syntax hebt gebruikt.
  • Leeg de cache van je website als je een cachingplugin gebruikt. Caching kan soms botsen met veranderingen aan links.
  • Als je de instellingen van permalinks hebt veranderd, kan het zijn dat de links in de body van je website nu verouderd zijn. Verander ze, of stel redirects in.
  • Controleer of je de slug van een artikel handmatig hebt veranderd en of ze nog bewerkt moeten worden.
  • Controleer of je een redirectplugin hebt geïnstalleerd of een plugin die redirects bevat. Zo ja, controleer welke redirects in de instellingen staan.
  • Als je plugins hebt die de berichttypen of links beïnvloeden, probeer die dan te deactiveren om te zien of dat het probleem oplost.
  • Als je überhaupt niet naar het instellingenscherm van Permalinks kunt, gebruik dan de eerdergenoemde methode via phpMyAdmin.

Volg deze tips en je zou de permalinks weer moeten kunnen laten werken.

Samenvatting

Permalinks zijn een extreem handige feature van WordPress. Je kunt ze gebruiken om de gebruikerservaring te verbeteren en je rankings in de zoekmachines te verhogen.

Als je de gids hierboven hebt doorgenomen, dan heeft je site nu mooie, geoptimaliseerde permalinks. Je hebt ze precies zo ingesteld zoals jij dat wil, voor alle berichttypen, taxonomieën en aangepaste slugs.

Nu is het jouw beurt: hoe beheer jij je permalinks? Hebben we nog iets gemist voor permalinks binnen WordPress? Laat het ons weten in de reacties hieronder.

Rachel McCollin

Rachel McCollin has been helping people build websites with WordPress since 2010. She's a huge fan of self-hosted WordPress and wants to help as many people as possible create an awesome website with it.