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 :
[pastacode lang=”php” message=”” highlight=”” provider=”manual”]
<?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' );
}
[/pastacode]
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.
27 Commentaires
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.
Génial comme astuce ! Pour les mise à jour, c’est parfait.
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.
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.
Il y a de multiple utilisation à ce code, encore du tout bon, merci Jonathan. Je garde ça sous le bras.
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.
Bien joué !
On entend presque pas le petit accent :p
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?
@Tom : Il faut créer un fichier dans le dossier “plugins” de “wp-content” ;)
Pour les deux administrator, ce n’est pas une erreur ^^
Pour moi ca marche bien quand je suis admin, mais page blanche sinon…
@Denny : Si il y a une page blanche et pas une erreur, c’est que le nouveau activé n’est pas correct.
Et oui, c’est sensible à la casse… merci pour ta réponse et pour l’astuce
du coup plus besoin de serveur de dev lol (quoique)
Par contre, concernant les widgets, j’ai l’impression qu’ils disparaissent….
En fait, je perds les widgets enregistrés (disposition), du coup les visiteurs ont les widgets par défaut…
@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 ?
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
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 ?
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.
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…
mais je vais quand meme continuer mes tests
D’accord, tiens nous au courant
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.
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
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.
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 ;)
entendu, mais quid des menus, peut on ne changer que le menu en fonction des membres ou des catégories de membres?
ty !
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