Archive pour septembre 2009
Création d’un espace restreint sur un site WordPress
Objectif
L’objectif est de créer un espace privé (par exemple Espace Clients) sur mon site WordPress auquel seuls des utilisateurs connectés précis (mes clients) ont accès et peuvent visualiser le menu et les sous-menus relatifs à cet espace. Pour les autres le menu Espace Clients ne doit pas être visible dans la barre de menus principale… Et de la même manière si l’URL d’une page relative à l’Espace Clients est saisie directement dans la barre du navigateur Web et que le Visiteur n’est pas connecté ou que l’Utilisateur n’appartient pas au groupe des Clients alors la page retournera une erreur 404. On doit également pouvoir gérer facilement les utilisateurs et par Groupe.
Exploration des Solutions…
On aurait pu croire que cela se faisait simplement ou que la solution était évidente avec WordPress, et bien non, pas tant que cela…
La première démarche a consisté à se dire que le plus simple était d’utiliser la solution .htaccess couplé avec .htpasswd… Mais bien sûr la solution ne peut convenir car dans .htaccess il faut spécifier des paths et on a n’a pas accès à ces répertoires via ftp.
La deuxième solution a alors été de se dire que le plus simple était d’utiliser des posts/pages avec une visibilité dite « privée» et de créer des utilisateurs qui auraient le droit de voir des pages privées… Or ce qu’il faut savoir c’est que dès lors que des pages sont en visibilité privée, elles ne sont plus visibles dans la barre de menu (valable pour la page parent et les pages enfants), et que l’utilisateur soit ou non connecté, ce qui pose bien sûr un problème pour la navigation dans cet espace restreint…
Donc finalement la solution qui répond le mieux au besoin exprimé, et qui reste la plus simple à mettre en œuvre et à gérer est la suivante.
LA Solution
Commençons par les utilisateurs. Ils sont créés par l’administrateur du site.
Dans WordPress Options -> Réglages -> Général
Inscription : l’option « Tout le monde peut s’enregistrer» est décochée
Par défaut tout nouvel utilisateur a pour rôle « Abonné» (l’abonné a des droits minimum avec aucun droit d’édition).
L’administrateur crée ses utilisateurs.
Le Widget Meta est utilisé (Options -> Apparence -> Widgets) afin que le visiteur ait accès au bouton Connexion et Déconnexion sur le site… Dommage que seul le nom de ce widget soit modifiable (éditez le Titre en renseignant Accès Client par exemple)… On ne peut pas par exemple enlever l’option Admin. du Site… Par défaut quand l’utilisateur se connecte il est dirigé sur son profil, or on préférera rediriger l’utilisateur directement sur le site/blog après la connexion. Pour cela on ajoute un bout de code dans le fichier functions.php qui se trouve dans le répertoire wp-content/themes
Au début du fichier functions.php juste après
<?php
On ajoute le bout de code suivant :
function loginRedirect( $redirect_to, $request_redirect_to, $user ) {
if ( is_a( $user, 'WP_User' ) && $user->has_cap( 'edit_posts' ) === false ) {
return get_bloginfo( 'siteurl' );
}
return $redirect_to;
}
add_filter( 'login_redirect', 'loginRedirect', 10, 3 );
Remarque : Si on regénère ultérieurement son thème (avec Artisteer) ou on utilise un nouveau thème, il faut veiller à bien ajouter manuellement ce bout de code.
Il existe un plugin, wpNamedUsers, qui va permettre de gérer les utilisateurs par groupe. Il faut installer ce plugin dans le répertoire wp-content/plugins et l’activer. Puis dans Options -> Réglages -> WPNamedUsers groups on crée un ou des groupes d’utilisateurs et pour chaque groupe on leur attribue des utilisateurs.
On crée par exemple le groupe Clients et on lui attribue les utilisateurs voulus (ceux créés au préalable).
Il ne nous reste plus qu’à créer nos pages ou posts qui ne pourront être accessibles que pour certains utilisateurs (par exemple pour ceux appartenant au Groupe Clients), en veillant à laisser l’option Visibilité à Publique, et à paramétrer l’option WPNamedUsers groups en cochant le groupe Clients.
Conclusion
Et pour conclure… L’installation du plugin role_manager s’avère utile pour gérer plus finement les droits associés à chaque rôle (type de compte).
Remerciements : à Paul qui m’a aidé à trouvé LA solution.