Maak een aangepaste rol voor je WordPress website

Standaard bevat WordPress al een aantal rollen die je aan gebruikers toe kunt kennen, maar wat als ze net niet aan je wensen voldoen? In zo’n geval kan je er voor kiezen om zelf een aangepaste rol voor je WordPress website te maken.

Hoe gaat het in zijn werk?
Simpel gezegd is er de volgende php functie waarmee je een nieuwe rol toe kunt voegen aan de WordPress database van je website:

<?php add_role( $rolNaam, $getoondeRolNaam, $rechten ); ?>

Hierin is $rolNaam (string, verplicht) de naam van de rol zoals hij in de database zal worden opgeslagen (speciale tekens en spaties afgeraden), $getoondeRolNaam (string, verplicht) is de naam hoe hij in je backend zichtbaar zal zijn (spaties mogen hier wel) en $rechten (array, optioneel) is een lijst van bevoegdheden voor de rol.

Hieronder volgt een voorbeeld hoe je een basis rol toe kunt voegen die iets meer rechten heeft dan de standaard ‘Abonnee’ rol:

$rol = add_role('super_abonnee’, __(‘Super abonnee’),
   array(
       'read'         => true, // true geeft aan dat de rol is toegestaan dit uit te voeren
       'edit_posts'   => true,
       'delete_posts' => false, // gebruik false om expliciet onderdelen te ontzeggen
   )
);
if ( $rol !== null) {
   echo ‘Nieuwe rol is aangemaakt.';
}
else {
   echo ‘Het ziet ernaar uit dat de rol al bestaat.';
}

Een aantal punten waar op gelet moet worden in de code:

  • De functie geeft een WP_Role object terug als het aanmaken is gelukt. Als de rol al bestaat, wordt er null geretourneerd. Om die reden zit er een check op null in die aangeeft of alles goed is gegaan.
  • Misschien is het je opgevallen dat er voor ‘Super abonnee’ gebruikt wordt gemaakt van de functie __(). Dit is om ervoor te zorgen dat de tekst vertaalbaar wordt. Wanneer je niet van plan bent om de tekst, nu of in de toekomst, te vertalen, kan je dit ook weglaten.
  • Rechten die je niet in de array meeneemt, worden standaard op ‘false’ gezet. Je hoeft dus niet handmatig alle rechten in de code op ‘false’ te zetten.

Waar plaats je de code?
De code hoeft maar één keer aangeroepen te worden om de nieuwe rol toe te voegen. Om die reden is het aangeraden om het op plugin- of thema-activatie te laten uitvoeren. Hiervoor zijn speciale ‘hooks’ in het leven geroepen. Meer informatie over deze hooks is te lezen op de WordPress codex pagina over register_activation_hook en switch_theme.

Je kunt deze hooks in combinatie met add_role() in je functions.php bestand plaatsen. Wanneer je dan een plugin of thema activeert, zal de add_role() functie worden aangeroepen en je nieuwe rol aan de database worden toegevoegd. Onderstaand een voorbeeld waarbij een ‘Super abonnee’ rol wordt aangemaakt als er een ander thema geactiveerd wordt:

add_action('switch_theme', 'nieuwe_rol');
function nieuwe_rol() {
                  $rol = add_role('super_abonnee', __('Super abonnee'),
                     array(
                         'read'         => true, // true geeft aan dat de rol is toegestaan dit uit te voeren
                         'edit_posts'   => true,
                         'delete_posts' => false, // gebruik false om expliciet onderdelen te ontzeggen
                     )
                  );
}

Bestaande rollen aanpassen
Wanneer een rol eenmaal is aangemaakt, is deze niet meer aan te passen. Je zult hiervoor eerst de rol moeten verwijderen en vervolgens opnieuw moeten aanmaken met de wijziging erin verwerkt. Je kunt dus niet nogmaals add_role() gebruiken om een bestaande rol te wijzigen.

Bestaande rollen verwijderen
Het verwijderen van een rol kan simpelweg met de functie

<?php remove_role( $role ); ?>

Hierin is $role (string, verplicht) de naam van de rol zoals hij in de database wordt weergegeven. Dit betekent dat je de naam moet gebruiken die met $rolNaam werd aangegeven in de add_role() functie.

Welke rechten zijn er in te stellen?
Voor een lijst van alle mogelijke rechten, kan je terecht bij de WordPress codex.

Het kan voorkomen dat er over ‘levels’ wordt gepraat bij de uitleg op die pagina. Deze waren bedoeld om standaard rechten snel te kunnen gebruiken bij nieuwe rollen. Zo staat level_0 bijvoorbeeld voor abonnee, en zou je alle rechten van een abonnee over kunnen nemen door ‘level_0 => true’ te gebruiken. Helaas zijn deze levels niet langer beschikbaar in WordPress en wordt gebruik hiervan afgeraden.

Plugin
Er is ook een plugin beschikbaar waarmee je nieuwe gebruikersrollen kunt aanmaken. Dit is voornamelijk handig als je vaak nieuwe rollen wilt aanmaken of wenst te wijzigen, maar in de meeste gevallen zal dit niet zo vaak voorkomen. Het wordt verder ook niet aangeraden om voor elk klein dingetje een plugin geïnstalleerd te hebben, want dit kan nadelige invloeden hebben op de snelheid van je website.

Michel Kraaijeveld is oprichter van WPsitemaken. Hij is ervan overtuigd dat het voor iedereen mogelijk moet zijn om een eigen website te maken, zonder lastige handleidingen door te hoeven nemen. Zelf is hij al 6 jaar actief met WordPress en probeert zijn kennis op een simpele manier over te brengen aan anderen.

Laat een reactie achter