Omdirigera användare till anpassade sidor per roll

WordPress används mer och mer som en webbapplikationsram. Med det användandet fallet kommer en massa extra omständigheter som WordPress inte täcker. Vill du verkligen att dina applikationsanvändare ska se WordPress-administratören?

I min webbapplikationsutvecklingserfarenhet är svaret på den frågan vanligen "nej".

Idag ska jag lära dig hur man omdirigerar en användare baserat på deras roll till en anpassad sida i WordPress.


Komma igång

Låt oss börja detta genom att bygga ett plugin. Du vill ha det i ett plugin, eftersom det är troligt att du ändrar din temformgivning och fortfarande vill ha omdirigeringsfunktionen. Vilken funktionalitet du vill leva förbi den nuvarande tematypen ska vara i ett plugin.

Skapa en ny plugin-mapp i din wp-content / plugins katalog som heter "cm-omdirigera-för-roll'och lägg till en fil som heter cm-omdirigera-för-role.php. Till den filen kommer vi att lägga till den grundläggande WordPress plugin header ses nedan.

Nu när du har ett plugin startat, låt oss ta en titt på hur användarinloggningen fungerar.


Användarinloggningsflöde

Standardplatsen som en användare kan logga in på på din WordPress-webbplats är via http://yoursite.com/wp-login.php. När du loggar in på en webbplats från den platsen skickar webbplatsen dig till WordPress admin dashboard.

Det betyder att WordPress admin startar och du måste använda en adminåtgärd för att fånga användaren. Jag hakar alltid på admin_init åtgärd eftersom den körs tillräckligt sent för att du har tillgång till användardata men inte så sent att användaren kommer att se någonting på instrumentbrädan.

Använda admin_init åtgärd innebär att även om de redan är inloggade och försöker komma åt WordPress-administratorn kommer de fortfarande att omdirigeras.

Låt oss nu titta på koden vi ska använda. För vårt exempel antar vi att vi vill omdirigera alla abonnenter men det kommer att fungera med en vanlig eller anpassad roll i WordPress.

/ ** * Omdirigerar användare baserat på deras roll * * @since 1.0 * @author SFNdesign, Curtis McHale * * @uses wp_get_current_user () Returnerar ett WP_User-objekt för den nuvarande användaren * @uses wp_redirect () Omdirigerar användaren till den angivna webbadressen * / funktion cm_redirect_users_by_role () $ current_user = wp_get_current_user (); $ role_name = $ current_user-> roller [0]; om ('abonnent' === $ roll_name) wp_redirect ('http://yoursite.com/dashboard');  // // // cm_redirect_users_by_role add_action ('admin_init', 'cm_redirect_users_by_role');

Vi startar processen genom att få vårt nuvarande användarobjekt med wp_get_current_user (). Utan det får vi vårt rollnamn och tilldelar det till $ ROLE_NAME variabel.

Då kontrollerar vi om $ ROLE_NAME matchar den roll vi vill omdirigera. Om den använder vi wp_redirect att skicka användaren till vårt val av plats.

Medan detta kommer att fungera har vi fortfarande en bit att lägga till.


Gör det AJAX säkert

När du gör AJAX-samtal i WordPress borde du alltid ringa WordPress AJAX-routingsfilen som finns inne i WordPress-administratören. Om vi ​​lämnar vår kod som det är något AJAX-samtal som gjorts av våra matchande roller kommer att misslyckas eftersom det kommer att uppfylla vår villkorliga och omdirigeras.

För att åtgärda det måste vi kontrollera om vi för närvarande gör ett AJAX-samtal och om så hoppa över kontrollen.

funktion cm_redirect_users_by_role () om (! definierad ('DOING_AJAX')) $ current_user = wp_get_current_user (); $ role_name = $ current_user-> roller [0]; om ('abonnent' === $ roll_name) wp_redirect ('http://yoursite.com/dashboard');  // om $ roll_name // om DOING_AJAX // cm_redirect_users_by_role add_action ('admin_init', 'cm_redirect_users_by_role');

Nu har vi vår omdirigeringsfunktion insvept i en check för DOING_AJAX konstant. Om det definieras, kör vi ett AJAX-samtal och vi vill hoppa över omdirigerings-koden.


Slutsats

Det är det vi kan nu omdirigera användare baserat på deras roll till en anpassad plats vi väljer. Vi kunde även omdirigera användare med olika roller till olika sidor om vi ville ha det.

Allt vi behöver göra är att lägga till en sekund villkorad för att matcha den andra rollen och ställa in platsen där vi ville omdirigera.