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.

Binnenkort

Natuurlijk schrijf ik niet iedere week, ik werk vooruit. En hieronder zie je alvast een aantal artikelen die je binnenkort mag verwachten. Mis deze niet! Schrijf je onder aan de pagina in voor de WordXPression nieuwsbrief, zodat jij altijd op de hoogte blijft. De blogartikelen met een tijdsaanduiding, die komen volgens planning, de artikelen met 'binnenkort' er achter zijn nog bezig geschreven te worden.

Nog niet uitgelezen?

Vind je dit artikel interessant? Mooi! Want ik heb nog veel meer te bieden. Op deze site vind je letterlijke honderden artikelen over WordPress, marketing, e-commers, e-learning en nog veel meer onderwerpen. Op zoek naar meer informatie? Kies ƩƩn van de trefwoorden hieronder of tik een zoekopdracht in.

Meest populaire blogposts
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 Informatie

Helaas is telefoonspam een serieus probleem geworden. Omdat ik dagelijks tientallen ‘spam’ en ‘scam’ telefoontjes ontving, heb ik mijn telefoonnummer van de site verwijderd.Ā 

Wanneer je echter het formulier hiernaast invult, en aangeeft dat je per telefoon contact op wilt nemen, maak ik graag een belafspraak met je op een moment wat ons beiden past. En krijg je gewoon het telefoonnummer van WordXPression, zodat je ieder moment kan bellen.

WordXPressionĀ 

Aardoliestraat 14-I 7553GT Hengelo

KVK : 75580152Ā 

Stuur een bericht

Mocht je interesse hebben in een nieuwe WordPress of WooCommerce website, verzoek ik je niet onderstaand formulier in te vullen, maar gebruik te maken van het intake/offerte formulier

Deze post rapporteren

Wanneer deze post niet meer relevant is of verouderde informatie bevat, zou ik het op prijs stellen wanneer je dit door wilt geven., zodat ik dit eventueel bij kan werken. De persoonlijke gegevens die je hieronder invult worden alleen gebruikt om de mail te versturen en zal niet voor marketingdoeleinden worden gebruikt.

WordXPression is WP Digital Marketing Geworden

In oktober 2010 begon ik met WordXPression. De naam zei eigenlijk precies wat ik toen deed: dienstverlening rond WordPress. Websites bouwen, aanpassen, onderhouden en later ook steeds meer maatwerk ontwikkelen.

Maar WordXPression is in de loop van de jaren nooit alleen WordPress geweest. Voor klanten voerde ik ook andere werkzaamheden uit. Soms kwamen die rechtstreeks voort uit een WordPress-project, bijvoorbeeld wanneer een website gekoppeld moest worden aan een ander systeem. Soms lag de oorsprong heel ergens anders: in mijn jarenlange ervaring als system integrator uit de periode voordat ik met WordXPression begon.

Daarom besloot ik in 2017 de officiƫle naam van mijn bedrijf te veranderen in WP Digital Marketing. WordXPression bleef daarbij bestaan als handelsnaam en bleef ook de naam waaronder de website en het grootste deel van mijn dienstverlening naar buiten traden.

De afgelopen jaren is die verhouding steeds verder veranderd. Naast WordPress zijn vooral Laravel, maatwerkapplicaties en systeemintegraties een steeds belangrijker deel van mijn werkzaamheden geworden. WordPress blijft belangrijk, maar het is niet langer een goede paraplu voor alles wat ik doe.

Daarom wordt het tijd om de naam die al sinds 2017 boven het bedrijf staat, ook daadwerkelijk centraal te stellen.

Vanaf 1 oktober gaat WordXPression verder als WP Digital Marketing.