WordPress wordt steeds meer gebruikt als een framework voor webtoepassingen. Met die use case komen een aantal extra omstandigheden die WordPress niet dekt. Wilt u echt dat de gebruikers van uw applicatie de WordPress-beheerder zien??
In mijn ervaring met de ontwikkeling van webapplicaties is het antwoord op die vraag meestal "nee".
Vandaag ga ik je leren hoe je een gebruiker kunt doorsturen op basis van hun rol naar een aangepaste pagina in WordPress.
Laten we beginnen met het bouwen van een plug-in. U wilt dit in een plug-in omdat het waarschijnlijk is dat u uw themaontwerp zult wijzigen en toch de omleidingsfunctionaliteit wilt hebben. Elke functionaliteit die u wilt laten leven voorbij het huidige themaontwerp moet in een plug-in zitten.
Maak een nieuwe map voor invoegtoepassingen in uw wp-content / plugins map met de naam 'cm-redirect-by-rol'en voeg een bestand toe met de naam cm-redirect-by-role.php. Aan dat bestand gaan we de standaard WordPress-plug-in-header toevoegen die hieronder wordt weergegeven.
Nu je een plugin hebt gestart, laten we eens kijken hoe gebruikersaanmelding werkt.
De standaardspot die een gebruiker kan aanmelden bij uw WordPress-site is via http://yoursite.com/wp-login.php
. Wanneer u zich vanaf die locatie aanmeldt bij een site, stuurt de site u naar het WordPress-beheerdersdashboard.
Dat betekent dat de WordPress-beheerder wordt opgestart en dat je een admin-actie moet gebruiken om de gebruiker te vangen. Ik haak altijd het admin_init
actie omdat het laat genoeg loopt dat u toegang hebt tot gebruikersgegevens, maar niet zo laat dat de gebruiker iets op het dashboard ziet.
De ... gebruiken admin_init
actie betekent dat zelfs als ze al zijn ingelogd en proberen toegang te krijgen tot de WordPress-beheerder, deze toch wordt omgeleid.
Laten we nu eens kijken naar de code die we gaan gebruiken. Voor ons voorbeeld nemen we aan dat we alle abonnees willen omleiden, maar dit werkt met elke standaard of aangepaste rol in WordPress.
/ ** * Gebruikers omleidt op basis van hun rol * * @since 1.0 * @author SFNdesign, Curtis McHale * * @uses wp_get_current_user () Retourneert een WP_User-object voor de huidige gebruiker * @uses wp_redirect () Omleidingen van de gebruiker naar de opgegeven URL * / function cm_redirect_users_by_role () $ current_user = wp_get_current_user (); $ role_name = $ current_user-> rollen [0]; if ('subscriber' === $ role_name) wp_redirect ('http://yoursite.com/dashboard'); // if // cm_redirect_users_by_role add_action ('admin_init', 'cm_redirect_users_by_role');
We starten dit proces door ons huidige gebruikersobject te krijgen wp_get_current_user ()
. Daarvan krijgen we onze rolnaam en kennen die toe aan de $ ROLE_NAME
veranderlijk.
Dan kijken we of $ ROLE_NAME
komt overeen met de rol die we willen omleiden. Als het dat is, gebruiken we het wp_redirect
om de gebruiker naar onze gewenste locatie te sturen.
Hoewel dit zal werken, hebben we nog een stuk om toe te voegen.
Wanneer u AJAX-oproepen in WordPress doet, moet u altijd het WordPress AJAX-routeringsbestand binnen de WordPress-beheerder bellen. Als we onze code verlaten omdat het een willekeurige AJAX-aanroep is die door onze overeenkomende rollen wordt gemaakt, mislukt omdat deze aan onze voorwaarden voldoet en wordt omgeleid.
Om dit op te lossen, moeten we controleren of we op dit moment een AJAX-oproep doen en zo de rolcontrole overslaan.
function cm_redirect_users_by_role () if (! defined ('DOING_AJAX')) $ current_user = wp_get_current_user (); $ role_name = $ current_user-> rollen [0]; if ('subscriber' === $ role_name) wp_redirect ('http://yoursite.com/dashboard'); // if $ role_name // if DOING_AJAX // cm_redirect_users_by_role add_action ('admin_init', 'cm_redirect_users_by_role');
Nu hebben we onze omleidingsfunctie gewikkeld in een cheque voor de DOING_AJAX
constante. Als dat is gedefinieerd, voeren we een AJAX-aanroep uit en willen we de omleidingscode overslaan.
Dat is het, we kunnen gebruikers nu omleiden op basis van hun rol naar een door ons gekozen aangepaste locatie. We zouden gebruikers zelfs met verschillende rollen naar andere pagina's kunnen doorsturen als we dat zouden willen.
Alles wat we zouden moeten doen is een tweede voorwaarde toevoegen om overeen te komen met de tweede rol en de locatie instellen op de plaats die we wilden omleiden.