Pagina redirecten naar aanleiding van een user role

Met deze code kan je afhankelijk van de gebruikersrol waarmee wordt ingelogd je gebruikers naar de juiste pagina sturen.

Wil je direct een mail ontvangen wanneer nieuwe snippets zijn toegevoegd?

Vul dan onderstaand formulier in en je krijgt direct na het toevoegen van nieuwe snippets een email. Zo blijf je altijd bij!

Wanneer je een site hebt, waar verschillende gebruikers met verschillende gebruikersrollen in kunnen loggen, dan kan het zo zijn, dat je specifieke gebruikers naar specifieke pagina’s wilt doorsturen. Bijvoorbeeld de beheerders naar de pagina ‘/wp-admin/’ (het WordPress dashboard), editors ook en de overige mensen naar een ‘mijn-account’ pagina.

Hiervoor is een geweldige plugin beschikbaar, LoginWP (Vroeger Peter’s Login Redirect), die ontzettend veel meer mogelijkheden biedt, dan wat ik verder in deze snippet zal beschrijven. En als je die ‘meer mogelijkheden’ nodig hebt (zoals specifieke pagina’s voor specifieke gebruikers), dan is het zeker een plugin om naar te kijken, maar voor het simpele gebruik zoals hierboven beschreven, is deze plugin overkill. En iedere plugin minder, is een versnelling van je website. Dus laten we eens kijken hoe we dit in code doen.

Meerdere gebruikersrollen

De eerste uitdaging waar we tegenaan lopen, is dat een gebruiker meerdere rollen kan hebben. Dit is niet direct via de WordPress interface in te geven zonder extra plugin of een stukje extra code, maar het onderliggende systeem is wel gebouwd op de mogelijkheid.

Een tweede uitdaging is dat voor WordPress een ‘rol’ weinig betekenis heeft. Het is eigenlijk alleen een kapstok om bevoegdheden (capabilities) aan op te hangen. Om te kijken of je wel of geen toegang hebt tot een bepaald onderdeel kijkt WordPress dus niet welke rol je hebt, maar welke capabilities. En daarom heeft WordPress ook geen functie om te checken of iemand een bepaalde rol heeft.

Die moeten we dus als eerste aan gaan maken. En omdat de kans groot is, dat er ook plugins zijn die iets vergelijkbaars doen, wanneer ze acties op rol-basis uitvoeren, is het dus hier nog veel belangrijker om een eigen prefix aan je functie toe te voegen.

<?php
function wxp_has_user_role($check_role){
    $user = wp_get_current_user();
    if(in_array( $check_role, (array) $user->roles )){
        return true;
    }
    return false;
}

Bovenstaande code werkt, maar is niet erg efficient. Want wanneer ik voor 5 rollen wil gaan bepalen waarheen een pagina geredirect moet worden, dan voer ik 5 maal de functie ‘wp_get_current_user() uit die 5 maal dezelfde gegevens opvraagt uit de database. Dat moet beter kunnen, toch?

En dat kan ook beter. We kunnen die gebruiker meegeven als tweede parameter. Gebruiken we de functie voor dezelfde gebruiker meerdere keren achter elkaar, dan halen we dus eerst de gebruiker op, en geven die als parameter mee.

Wordt er geen gebruiker meegegeven, dan zal hij uit de omgeving worden opgevraagd, anders zal de meegegeven gebruiker gebruikt worden.

De code komt er dan als volgt uit te zien :

<?php
function wxp_has_user_role($check_role, $user){
    if (!$user) {
       $user = wp_get_current_user();
    }
    if(in_array( $check_role, (array) $user->roles )){
        return true;
    }
    return false;
}

Nu hebben we alleen nog maar een functie gemaakt om te kijken welke rol iemand wel of niet heeft. Bedenk goed, dat iemand meerdere rollen kan hebben.

Wanneer iemand meerdere rollen heeft, bijvoorbeeld ‘admin’ en ‘customer’ (om maar een voorbeeld te geven), dan wil ik, dat hij wordt doorgestuurd naar de pagina die bij de hoogste rol die hij heeft hoort. Dus in ons voorbeeld wordt hij naar de pagina voor ‘admin’ doorgestuurd. Het is dus van belang, dat de onderstaande code de controles goed uitvoert. Je kan iemand per slot van rekening maar eenmaal doorsturen.

<?php
add_action('admin_init','wxp_redirect_by_role');

function wxp_redirect_by_role() {
   $user = wp_get_current_user();
   if (wxp_has_user_role('admin') {wp_redirect(home_url('/wp-admin/')); exit;}
   if (wxp_has_user_role('editor') {wp_redirect(home_url('/wp-admin/')); exit;}
   if (wxp_has_user_role('customer') {wp_redirect(home_url('/my-account/')); exit;}
   wp_redirect(home_url());
}

Nog niet zo gek lang geleden heb ik een uitgebreid artikel geschreven over de rollen in WordPress.

Codesnippet verbeteren

Het doel van deze code snippet is een probleem op te lossen in een specifieke situatie. Daarom zie je regelmatig voorbeelden waar je specifiek tekst moet aanpassen om te krijgen wat je wilt. 

Wil jij leren hoe je complete plugins zelf kunt programmeren inclusief ‘admin’ schermen voor het instellen en de output in de gewenste taal, dan is misschien de cursus ‘Introductiecursus Plugins Programmeren‘ iets voor jou. 

Wil je als ‘full stack’ WordPress programmeur aan de gang gaan, dan biedt WordXPression ook een compleet traject ‘WordPress Developer‘ aan. Dit is een traject wat deels online, deels klassikaal wordt gegeven.

WordPress Developer worden?

Wil je leren hoe je zelf plugins, thema's, shortcodes, widgets, Gutenberg blocks en meer kan maken?
Schrijf je dan in voor de cursus WordPress Developer.

Meer snippets

jQuery Migrate verwijderen voor meer snelheid
Voor de meeste WordPress websites is jQuery Migrate al heel lang niet meer nodig. Je kan enigszins de...
In WooCommerce de prijs psychologisch aantrekkelijk tonen
Enkele handige code snippets om je productprijs te formatteren.
Password Change notificaties onderdrukken in WordPress
Voorkom dat je een email krijgt iedere keer wanneer iemand zijn wachtwoord aanpast.
Stuur je bezoeker naar een 'dank je' pagina na commentaar
In enkele regels stuur je je bezoeker naar een 'bedankt pagina'.
Shortcodes voor het tonen en verbergen van content
Hoe maak ik een shortcode waarmee ik content van mijn posts kan verbergen?
Kolommen verbergen in de WooCommerce winkelwagen tabel
Stel, de verkoopt een product of producten waarvoor een klant er per definitie maar één aan kan schaffen....

Veiligheid voor alles!

Met betrekking tot de code die je hier aantreft een aantal waarschuwingen, voordat je deze code snippets toepast op je eigen website.

  1. Voer de code nooit direct uit op je eigen website, maar probeer deze eerst op een staging omgeving of een locale kopie van je website. 
  2. Voor je de geteste code installeert op je website, maak eerst een back up van je website.
  3. Zorg altijd voor alle zekerheid, dat je voor je een aanpassing live zet, je ook de FTP gegevens van je website bij de hand hebt.  
 
Voel je je onvoldoende vertrouwd met het toepassen van een dergelijke code snippet, bedenk dat je dit ook door een professional kan laten doen. De WordXPression support strippenkaart is een voordelige manier om dit soort aanpassingen te laten doen.
Heeft dit artikel je geholpen je probleem op te lossen?
Deel het met je vrienden via je favoriete social media.

Heb je vragen bij, of opmerkingen over deze code snippet, stel deze bij de commentaren hieronder.

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

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

Contact Information

WordXPression 

Bezoekadres
Eperweg 135 (op afspraak)
8072 PL Nunspeet

Postadres
Aardoliestraat 14-I
7553GT Hengelo

06-10449807 (van 9:00 tot 17:00 van ma-vr)

KVK : 75580152 

Social media
Stuur een bericht

Introductiecursus Plugins Programmeren

wordpress coding Can use php code as background in html

Ontdek de wereld van WordPress Plugin ontwikkeling met WordXPression's introductiecursus