Umleiten von Benutzern zu benutzerdefinierten Seiten nach Rolle

WordPress wird immer mehr als Framework für Webanwendungen eingesetzt. Mit diesem Anwendungsfall kommen eine Reihe zusätzlicher Umstände, die WordPress nicht abdeckt. Wollen Sie wirklich, dass Ihre Anwendungsbenutzer den WordPress-Administrator sehen??

In meiner Erfahrung mit der Entwicklung von Webanwendungen lautet die Antwort auf diese Frage normalerweise "Nein".

Heute werde ich Ihnen zeigen, wie Sie einen Benutzer basierend auf seiner Rolle auf eine benutzerdefinierte Seite in WordPress umleiten.


Erste Schritte

Beginnen wir damit, ein Plugin zu erstellen. Sie möchten dies in einem Plugin, weil Sie wahrscheinlich Ihr Design ändern und trotzdem die Weiterleitungsfunktion nutzen möchten. Jede Funktionalität, die Sie über das aktuelle Design hinaus leben möchten, sollte in einem Plugin enthalten sein.

Erstellen Sie einen neuen Plugin-Ordner in Ihrem WP-Inhalt / Plugins Verzeichnis mit dem Namen 'cm-Weiterleitung nach Rolle'und fügen Sie eine Datei mit dem Namen cm-redirect-by-role.php. Zu dieser Datei fügen wir den grundlegenden Header des WordPress-Plugins hinzu.

Nachdem Sie nun ein Plugin gestartet haben, schauen wir uns an, wie die Benutzeranmeldung funktioniert.


Benutzer-Login-Ablauf

Die Standardstelle, über die sich ein Benutzer bei Ihrer WordPress-Site anmelden kann, ist über http://yoursite.com/wp-login.php. Wenn Sie sich von diesem Standort aus bei einer Site anmelden, werden Sie von der Site an das WordPress-Admin-Dashboard gesendet.

Das bedeutet, dass der WordPress-Administrator gestartet wird und Sie eine Administratoraktion verwenden müssen, um den Benutzer zu fangen. Ich hänge immer die admin_init Aktion, da sie so spät ausgeführt wird, dass Sie Zugriff auf Benutzerdaten haben, aber nicht so spät, dass der Benutzer etwas im Dashboard sehen kann.

Verwendung der admin_init Aktion bedeutet, dass sie auch dann weitergeleitet werden, wenn sie bereits angemeldet sind und versuchen, auf den WordPress-Administrator zuzugreifen.

Schauen wir uns nun den Code an, den wir verwenden werden. Für unser Beispiel nehmen wir an, dass wir alle Abonnenten umleiten möchten, dies funktioniert jedoch mit jeder Standard- oder benutzerdefinierten Rolle in WordPress.

/ ** * Leitet Benutzer basierend auf ihrer Rolle um. * * @Since 1.0 * @author SFNdesign, Curtis McHale * * @uses wp_get_current_user () Gibt ein WP_User-Objekt für den aktuellen Benutzer zurück. * @Uses wp_redirect () Leitet den Benutzer zur angegebenen URL * / function cm_redirect_users_by_role () $ current_user = wp_get_current_user (); $ Rollenname = $ Current_user-> Rollen [0]; if ('subscriber' === $ role_name) wp_redirect ('http://yoursite.com/dashboard');  // wenn // cm_redirect_users_by_role add_action ('admin_init', 'cm_redirect_users_by_role');

Wir starten diesen Prozess, indem wir unser aktuelles Benutzerobjekt mit holen wp_get_current_user (). Daraus bekommen wir unseren Rollennamen und weisen ihn dem zu $ Rollenname Variable.

Dann prüfen wir ob $ Rollenname entspricht der Rolle, die wir umleiten möchten. Wenn ja, benutzen wir wp_redirect um den Benutzer zu unserem Standort Ihrer Wahl zu schicken.

Während dies funktionieren wird, müssen wir noch ein Stück hinzufügen.


AJAX sicher machen

Wenn Sie AJAX-Aufrufe in WordPress durchführen, sollten Sie immer die WordPress-AJAX-Routing-Datei aufrufen, die sich im WordPress-Administrator befindet. Wenn wir unseren Code so belassen, dass ein AJAX-Aufruf, der von unseren übereinstimmenden Rollen ausgeführt wird, fehlschlägt, da er unsere Bedingungen erfüllt und umgeleitet wird.

Um dies zu beheben, müssen wir überprüfen, ob wir gerade einen AJAX-Anruf durchführen und wenn dies der Fall ist, die Rollenprüfung überspringen.

Funktion cm_redirect_users_by_role () if (! defined ('DOING_AJAX')) $ current_user = wp_get_current_user (); $ Rollenname = $ Current_user-> Rollen [0]; if ('subscriber' === $ role_name) wp_redirect ('http://yoursite.com/dashboard');  // wenn $ Rollenname // wenn DOING_AJAX // cm_redirect_users_by_role add_action ('admin_init', 'cm_redirect_users_by_role');

Jetzt haben wir unsere Weiterleitungsfunktion in eine Prüfung für die DOING_AJAX Konstante. Wenn dies definiert ist, führen wir einen AJAX-Aufruf aus und möchten den Weiterleitungscode überspringen.


Fazit

Nun können wir Benutzer basierend auf ihrer Rolle an einen benutzerdefinierten Speicherort unserer Wahl umleiten. Wir könnten sogar Benutzer mit unterschiedlichen Rollen auf andere Seiten umleiten, wenn wir dies wollten.

Alles, was wir tun müssen, ist, eine zweite Bedingung hinzuzufügen, die der zweiten Rolle entspricht, und den Ort festlegen, an den wir umleiten möchten.