Tout savoir sur WordPress

Afficher un thème différent en fonction du rôle des membres

En fonction du rôle des membres qui visitent votre site, cette astuce permet d’afficher un thème différent pour un ou plusieurs rôles en particulier.

Par défaut, il n’existe aucune alternative pour afficher un thème différent en fonction du rôle d’un membre. Cette fonctionnalité pourrait s’avérer pratique dans le cas du développement d’une nouvelle version d’un site. En effet, on pourrait limiter l’accès à ce nouveau thème aux administrateurs et faire en sorte que les autres membres continuent à naviguer sur la version actuellement en ligne.

Dans l’exemple suivant, on souhaite afficher le thème Techified aux administrateurs et le thème Twenty Eleven aux autres membres.

Pour cela, on doit obligatoirement créer un plugin avec le code suivant :

<?php
/*
Plugin Name: Theme pour visiteurs
Plugin URI: http://www.boiteaweb.fr/
Description: Permet de sélectionner un thème selon le rôle
Version: 1.0
Author: Juliobox
Author URI: http://www.BoiteaWeb.fr
License: GPLv2
*/

add_action( 'setup_theme', 'baw_switch_theme_by_role' );
function baw_switch_theme_by_role() {
    
    // Je force l'init de l'utilisateur car j'ai besoin de connaitre son role très tôt
    $GLOBALS['wp']->init();
    
    // Récupération du template du thème actuel
    $current_theme = wp_get_theme()->template;
    
    // Vérification des droits des utilisateurs et du thème courant
    if( current_user_can( 'administrator' ) && $current_theme != 'techified' )
        switch_theme( 'techified', 'techified' );
    elseif( !current_user_can( 'administrator' ) && $current_theme != 'twentyeleven' )
        switch_theme( 'twentyeleven', 'twentyeleven' );
}

Les valeurs « techified » et « twentyeleven » correspondent aux noms des dossiers des thèmes concernés par le script. N’oubliez pas de modifier ces valeurs par celles qui vous concerne.

PS : Merci à Julio pour la correction du code d’origine.

Cet article a été mis à jour il y a 2544 jours - Il n'est peut être plus à jour !

Article écrit par Jonathan B.

Jonathan est le co-fondateur de WP Media, startup connue pour être l’auteur de WP Rocket et Imagify. Il est aussi co-organisateur du WordCamp Lyon et Paris.

27 Commentaires

  1. Très intéressant. Je me contentais de détails de présentation avec des conditions mais un thème entièrement différent, c’est très tentant pour apporter un « plus » éventuel – et plus simple à coder en fait.

  2. Bien vu. Au niveau des applications, je pense que cela servira bien aux blogs avec beaucoup de membres. De même pour un test chez le client.
    Merci.

  3. Excellente astuce une fois de plus.

    Attention cependant à ceux qui l’utilisent si vous avez un système de cache. Si c’est le cas, pensez-bien à la désactiver pour les utilisateurs connectés sinon ils ne verront pas la différence, ou pire, ils forceront la mise en cache du mauvais thème.

  4. Il y a de multiple utilisation à ce code, encore du tout bon, merci Jonathan. Je garde ça sous le bras.

  5. Je vois bien l’utilité en cas de création de nouveau site. On met un thème d’attente pour le grand public et on travail sur son site tranquillement.

  6. Bien ! Mais par contre, comment on le créer ce plugin enfin on copie le code où? Et dans le code, il y a :  » if( current_user_can( ‘administrator’ ) && $current_theme != ‘techified’ )
    switch_theme( ‘techified’, ‘techified’ );
    elseif( !current_user_can( ‘administrator’ ) && $current_theme != ‘twentyeleven’ )
    switch_theme( ‘twentyeleven’, ‘twentyeleven’ );
    } » Il y a deux administrator, il faut en changer un ou pas?

  7. @Tom : Il faut créer un fichier dans le dossier « plugins » de « wp-content » ;)

    Pour les deux administrator, ce n’est pas une erreur ^^

  8. @Denny : Si il y a une page blanche et pas une erreur, c’est que le nouveau activé n’est pas correct.

  9. @Denny : Je ne sais pas si les widgets sont liés aux thèmes. Il me semble que WordPress le fait par défaut non ?

  10. Peut être parce que j’utilise des widgets propres au thème, du coup, quand le theme visiteur est activé, les widgets du theme admin sautent.
    Si besoin, je peux rajouter des captures

  11. Je viens de tester ceci :
    En admin j’affiche le thème 2012.
    En visiteur j’affiche le thème 2010.
    Sous l’administration (2012) j’ajoute le widget « Calendrier ».
    Je visite le site en admin, j’ai le widget.
    Je visite maintenant le site en visiteur, je l’ai aussi, sous le thème 2010.

    Quel est le soucis ?

  12. Pas besoin, tu viens de résoudre toi même le problème ;)
    Si les widgets sont liés à un thème, il est plus que logique qu’ils ne peuvent apparaitre pour l’autre thème.

  13. C’est sur et logique, mais car il y a un mais:
    Je suis sous itheme2 pour tout le monde.
    J’active le plugin en laissant itheme2 pour les visiteurs pendant que je travaille sur un autre thème et la les visiteurs perdent tous les widgets du thème ou non et moi aussi par la meme occasion. Peut etre que les widgets de base fonctionnent…

  14. Attention c’est une méthode assez lente dans son ensemble et elle fait switcher le thème principal à chaque chargement de page. Si un utilisateur se connecte en mode normal puis s’il y a une connexion concurrente avec un admin. Il se peut que, au final, un admin se retrouve avec twentyten puis un utilisateur normal avec le thème de l’admin. Dans le cas que j’ai eu c’est ce qu’il s’est passé et le site était devenu assez lent…
    Cependant il y a une autre méthode qui permet d’avoir son thème principal d’activé et de switcher pour une autre personne. Avec les filtres ‘template’ et ‘stylesheet’ on peut retourner le thème que l’on veut charger de façon dynamique et ne fait pas faire tout le changement de thème ( sauvegarde des widgets etc. ). C’est donc juste une solution pour changer de thème dynamiquement mais aucune fonctionnalité de widget/menu etc. ne pourra être configuré pour lui puisque au retour dans l’admin le thème courant sera celui sélectionné au préalable.

  15. J’ai pourtant testé les refresh concurrents et je n’ai jamais eu ce chevauchement. Dans un comm plus haut je donne un ptit scénario de test et il a fonctionné aussi.
    Le switch ne se fait pas à chaque page, seulement quand un admin visite apres un guest et inversement.
    Les filtres que tu utilises modifient bien les chemins CSS etc mais pas le thème en entier il me semble.
    Tu aurais/pourrais retoucher cette astuce si tu as mieux ? Merciiiii

  16. C’est pas que j’ai mieux mais l’utilisation des deux filtres mentionnés plus tôt sont un peu moins violents que le switch du thème complet.
    On perd les widgets/menus mais bon pas forcément utile.

  17. Si du côté admin je perds mes menus et widgets, comment je dev ma nouvelle version ? C’est tou l’intéret de l’astuce qui n’est que temporaire dans le cas où on dev sur le site de prod sa nouvelle version ou que l’on teste des choses.
    Dans tous les cas, je recommande d’utiliser du local ou un sous-domaine like pour éviter tout problème.
    Merci a toi ;)

  18. entendu, mais quid des menus, peut on ne changer que le menu en fonction des membres ou des catégories de membres?
    ty !

  19. Bonjour je voudrais savoir si il est possible de faire pareil avec les profils membre avoir un profil différent selon le role du connecté et si c’est possible comment ? merci

in eleifend leo. diam risus. vel, Praesent quis ut elementum at