Rediriger les utilisateurs vers des pages personnalisées par rôle

WordPress est de plus en plus utilisé comme un cadre d'application Web. Avec ce cas d'utilisation, de nombreuses circonstances supplémentaires ne sont pas couvertes par WordPress. Voulez-vous vraiment que les utilisateurs de votre application voient l'administrateur de WordPress??

Dans mon expérience en développement d'applications Web, la réponse à cette question est généralement "non".

Aujourd'hui, je vais vous apprendre à rediriger un utilisateur en fonction de son rôle vers une page personnalisée dans WordPress..


Mise en place

Commençons par créer un plugin. Vous voulez cela dans un plugin car il est probable que vous changiez la conception de votre thème tout en souhaitant la fonctionnalité de redirection. Toute fonctionnalité que vous voulez vivre après la conception du thème actuel doit être dans un plugin.

Créez un nouveau dossier de plugins dans votre wp-content / plugins répertoire appelé 'cm-redirect-by-role'et ajouter un fichier appelé cm-redirect-by-role.php. A ce fichier, nous allons ajouter l'en-tête de base du plugin WordPress vu ci-dessous.

Maintenant que vous avez démarré un plugin, voyons comment fonctionne la connexion utilisateur.


Flux de connexion de l'utilisateur

Le lieu par défaut où un utilisateur peut se connecter à votre site WordPress est via http://votresite.com/wp-login.php. Lorsque vous vous connectez à un site à partir de cet emplacement, le site vous envoie vers le tableau de bord d'administration WordPress..

Cela signifie que l'administrateur WordPress est en train de démarrer et que vous devez utiliser une action de l'administrateur pour intercepter l'utilisateur. J'attache toujours le admin_init action car il fonctionne suffisamment tard pour que vous ayez accès aux données utilisateur, mais pas trop tard pour que l'utilisateur puisse voir quoi que ce soit sur le tableau de bord.

En utilisant le admin_init action signifie que même s'ils sont déjà connectés et tentent d'accéder à l'administrateur WordPress, ils seront toujours redirigés.

Voyons maintenant le code que nous allons utiliser. Pour notre exemple, nous supposerons que nous voulons rediriger tous les abonnés, mais cela fonctionnera avec n’importe quel rôle standard ou personnalisé dans WordPress..

/ ** * Redirige les utilisateurs en fonction de leur rôle * * @since 1.0 * @author SFNdesign, Curtis McHale * * @us wp_get_current_user () Retourne un objet WP_User pour l'utilisateur actuel * @us wp_redirect () Réoriente l'utilisateur vers l'URL spécifiée. * / function cm_redirect_users_by_role () $ current_user = wp_get_current_user (); $ role_name = $ current_user-> roles [0]; if ('subscriber' === $ role_name) wp_redirect ('http://votresite.com/dashboard');  // if // cm_redirect_users_by_role add_action ('admin_init', 'cm_redirect_users_by_role');

Nous commençons ce processus en obtenant notre objet utilisateur actuel avec wp_get_current_user (). À partir de cela, nous obtenons notre nom de rôle et l’attribuons au $ nom_rôle variable.

Puis on vérifie si $ nom_rôle correspond au rôle que nous voulons rediriger. Si c'est le cas, nous utilisons wp_redirect envoyer l'utilisateur à notre emplacement de choix.

Bien que cela fonctionne, nous avons encore une pièce à ajouter.


Rendre AJAX sûr

Lorsque vous effectuez des appels AJAX dans WordPress, vous devez toujours appeler le fichier de routage WordPress AJAX qui se trouve dans l’administrateur de WordPress. Si nous laissons notre code comme c'est le cas, tout appel AJAX effectué par nos rôles correspondants échouera puisqu'il répondra à notre condition et sera redirigé.

Pour résoudre ce problème, nous devons vérifier si nous effectuons actuellement un appel AJAX et, le cas échéant, ignorer la vérification du rôle..

function cm_redirect_users_by_role () if (! define ('DOING_AJAX')) $ current_user = wp_get_current_user (); $ role_name = $ current_user-> roles [0]; if ('subscriber' === $ role_name) wp_redirect ('http://votresite.com/dashboard');  // if $ nom_rôle // if DOING_AJAX // cm_redirect_users_by_role add_action ('admin_init', 'cm_redirect_users_by_role');

Maintenant, nous avons notre fonction de redirection enveloppée dans un chèque pour le DOING_AJAX constant. Si cela est défini, nous exécutons un appel AJAX et nous voulons ignorer le code de redirection.


Conclusion

Voilà, nous pouvons maintenant rediriger les utilisateurs en fonction de leur rôle vers un emplacement personnalisé de notre choix. Nous pourrions même rediriger des utilisateurs avec des rôles différents vers des pages différentes si nous le souhaitions..

Tout ce que nous avons à faire est d’ajouter une deuxième condition pour correspondre au deuxième rôle et définir l’emplacement où nous voulions rediriger..