Automatisch een tweede rol toevoegen voor je WordPress gebruiker

Soms heb je een tweede rol nodig voor je WordPress gebruikers… maar hoe doe je het?

Een tweede rol

Nog niet zo gek lang geleden heb ik beschreven hoe je ‘tweede rollen’ kan gebruiken in het WordPress autorisatie systeem.

Allemaal best leuk en aardig, maar hier ging ik eigenlijk uit van een situatie, waarin je die tweede rol handmatig toe zou willen voegen om iemand wat extra rechten te geven.

Nog niet zo gek lang geleden liep ik eigenlijk tegen een compleet ander probleem aan. Een situatie waarbij een gebruiker twee rollen moest krijgen, om het systeem te laten functioneren als gewenst.

Laten we eerst het probleem eens meer in detail beschrijven.

Een online leeromgeving met ‘front end editing’.

Wat was de situatie. Mijn klant heeft een online leeromgeving. En om ook iets aan community building te kunnen doen, wilde ze de mogelijkheid hebben om mensen berichten te kunnen laten posten, zonder dat het nu direct een forum achtig iets zou worden. Meer ‘faceboekerig’.

Dat leek allemaal geen probleem en makkelijk op te lossen. De plugin ‘Front end Publisher Pro‘, die ik recentelijk nog besproken heb, leek een prima oplossing te bieden.

Geen vuiltje aan de lucht dus. Tenminste dat leek zo.

Eén van de eisen was dat de cursist naast teksten in kunnen geven, ook foto’s zou moeten kunnen uploaden. En daar werd het toch even problematisch.

WordPress staat het namelijk niet toe, dat gebruikers met de rollen ‘contributor’ en ‘subscriber’ zomaar afbeeldingen kunnen uploaden.

Gelukkig heeft de plugin daar in voorzien. Met een simpel vinkje kan je aangeven, dat beide rollen het wel moeten kunnen. En dat werkt als een tierelier.

Probleem opgelost dus?

Helaas niet!

Zoals ik beschreven heb in mijn artikel over de rollen in WordPress, zou een rol een soort ‘kapstok’ moeten zijn waar je bepaalde capabilities aan ‘ophangt’. Een rol op zich zou geen integraal onderdeel van je autorisatiesysteem uit mogen maken.

Helaas houden niet alle plugin bouwers daar rekening mee en gebruiken ze toch het rollen systeem voor oneigenlijke doeleinden.

Alle cursisten zijn klanten!

In ons geval konden de cursisten toch geen foto’s uploaden. En dat om de simpele reden, dat de online leeromgeving WooCommerce gebruikt als ‘payment engine’. En WooCommerce maakt iedereen die nieuw koopt klant. En een klant mag ook geen afbeeldingen uploaden, omdat een ‘klant’ eigenlijk gewoon een ‘subscriber’ is.

Voel je hem al aankomen?

Inderdaad. ‘Klanten’ (‘customer’) hebben geen upload rechten in de Front end Publisher Pro plugin, omdat ‘klanten’ geen ‘subscribers’ zijn, alleen maar gebruikers met dezelfde initiële rechten als de ‘subscribers’. En die rechten zijn zojuist voor de ‘subscribers’ door de plugin uitgebreid met ‘upload’ rechten, maar niet voor de ‘customer’ rol.

Dit had door de maker van de plugin makkelijk opgelost kunnen worden door in plaats van een vinkje om de contributer en subscriber rol meer rechten te geven, alle rollen zonder upload capabilities in een lijstje te tonen en hier aan kunnen geven wie er wel of niet de upload capabilities zou moeten krijgen.

Maar dat was niet gedaan, dus moesten we het probleem anders oplossen. Ondertussen is mijn suggestie voor de beste oplossing wel doorgegeven aan de auteur van de plugin.

Een simpel codefragment

Een tweede rol toevoegen door middel van code

Wat ik dus wil, is iedere keer dat er een nieuwe gebruiker wordt toegevoegd, de rol ‘subscriber’ wordt toegevoegd. Vanzelfsprekend test je dit eerst op een staging omgeving. En mocht je helemaal onbekend zijn met hoe je veilig code toe kan voegen aan WordPress is het goed mijn artikel over WooCommerce voor Waaghalzen een keer te lezen.

<?php
add_action( 'user_register', 'add_secondary_role', 10, 1 );
 
function add_secondary_role( $user_id ) {
 
    $user = get_user_by('id', $user_id);
    $user->add_role('subscriber');
 
}

Maar gaat dit niet verkeerd, wanneer de gebruiker met de rol ‘subscriber’ zou worden geregistreerd? Dat is het mooie van deze code. Of eigenlijk van WordPress. Indien ik een rol toevoeg die al bestaat, dan gebeurt er letterlijk niets. Ik kan dus geen twee ‘subscriber’ rollen in het systeem krijgen. Een tweede rol kan dus niet gelijk zijn aan een al bestaande rol. Gelukkig.

Het enige probleem is, dat deze code geen rekening houdt met al bestaande gebruikers. Want deze extra rol wordt alleen toegevoegd wanneer een gebruiker wordt aangemaakt.

Heb je al veel bestaande klanten in je database, dan zal er een specifiek conversiescript geschreven moeten worden. Zijn het er maar een paar, dan is de eerder besproken plugin HM Multiple Roles een uitkomst om die tweede rol toe te voegen.

Alleen rollen toevoegen in geval van een specifieke rol

In ons bovenstaande voorbeeld krijgt iedereen de rol ‘subscriber’ toegevoegd. En aangezien ‘subscriber’ de gebruiker met de minste rechten is, is dat natuurlijk geen enkel probleem. Geen probleem, maar wel enige ‘database vervuiling’. Want die extra rol is in ons praktijkvoorbeeld alleen nodig bij mensen met de ‘customer’ rol.

Om te voorkomen, dat ook de ‘administrator’ en welke rollen allemaal meer de ‘subscriber’ rol toegevoegd krijgen, kunnen we natuurlijk ook eerst kijken, wat de rol van deze nieuwe gebruiker is.

De code wordt met deze extra uitbreiding als volgt :

<?php
add_action( 'user_register', 'add_secondary_role', 10, 1 );
 
function add_secondary_role( $user_id ) {
 
    $user = get_user_by('id', $user_id);
    if (in_array('customer',$user->roles)) {
        $user->add_role('subscriber');
    }
 
}

Wat we hier eigenlijk zeggen, is dat we alleen die nieuwe rol toe willen voegen, indien in het lijstje van rollen voor die gebruiker de rol ‘customer’ voorkomt.

Code schuw?

Vind je het zelf eng om code aan je WordPress website toe te moeten voegen? Vergeet niet, dat wanneer je het eerst uitprobeert op een test omgeving, er zelden wat fout kan gaan.

Blijf je het eng vinden, weet dan, dat het toevoegen van codefragmenten aan je functions.php iets is wat prima binnen de WordXPression support strippenkaart past. En sinds kort is de support strippenkaart ook beschikbaar voor kleinere bedragen.

Wees eens aardig en deel dit met je vrienden
Enkele trefwoorden om vergelijkbare posts te vinden:

Word je website de baas. Neem vandaag nog contact op!

Contact Information

WordXPression 
Imkersdreef 525
7328DG Apeldoorn
06-10449807 (van 9:00 tot 17:00 van ma-vr)

KVK : 75580152 

Social media
Stuur een bericht

Flinke kortingen op cursussen van WordXPression.