Est-il possible de restreindre l’accès d’un compte utilisateur WordPress a des zones (très) spécifiques du site ?
1. Créer un rôle utilisateur personnalisé
Si le rôle utilisateur spécifique n’existe pas déjà, vous pouvez en créer un nouveau avec des permissions spécifiques.
- Code pour créer un rôle personnalisé :
function my_custom_role() {
add_role(
'custom_role',
__('Custom Role'),
array(
'read' => true,
'manage_options' => false,
'edit_posts' => false,
'edit_pages' => false,
// Add other capabilities as needed
)
);
}
add_action('init', 'my_custom_role');
Ce code crée un nouveau rôle appelé « Custom Role » avec des capacités très limitées. Vous pouvez ajuster les capacités en fonction de vos besoins.
2. Modifier les capacités du rôle pour des pages spécifiques
Une fois le rôle créé, vous pouvez accorder des permissions spécifiques pour certaines pages d’administration.
- Code pour permettre l’accès à des options spécifiques :
function allow_custom_role_to_access_specific_pages() {
$role = get_role('custom_role');
if ($role) {
// Accorder l'accès à une page spécifique
$role->add_cap('edit_theme_options'); // Exemple pour permettre l'accès aux options de thème
// Ajoutez d'autres capacités si nécessaire
}
}
add_action('init', 'allow_custom_role_to_access_specific_pages');
3. Restreindre l’accès à d’autres parties de l’admin
Vous pouvez cacher ou restreindre l’accès à certaines pages d’administration en utilisant des hooks comme admin_menu
pour supprimer des éléments de menu.
- Code pour masquer des pages d’administration :
function remove_menu_items_for_custom_role() {
if (current_user_can('custom_role')) {
remove_menu_page('tools.php'); // Masque l'accès aux outils
remove_menu_page('edit.php'); // Masque l'accès aux articles
// Ajoutez d'autres suppressions si nécessaire
}
}
add_action('admin_menu', 'remove_menu_items_for_custom_role');
4. Utiliser un plugin pour gérer les permissions
Si vous préférez une interface utilisateur pour gérer ces permissions, plusieurs plugins WordPress peuvent faciliter ce processus :
- User Role Editor : Ce plugin permet de gérer les capacités de chaque rôle directement depuis l’interface WordPress.
- Members : Un autre plugin populaire qui permet de créer, modifier des rôles et restreindre l’accès aux contenus.
- Advanced Access Manager : Pour un contrôle plus granulaire, notamment sur des pages spécifiques.
5. Accorder l’accès à une seule page spécifique
Si vous voulez restreindre l’accès à une seule page spécifique dans l’admin, vous pouvez ajouter une condition supplémentaire basée sur l’URL de la page.
- Exemple :
function restrict_access_to_specific_page() {
if (current_user_can('custom_role')) {
global $pagenow;
if ($pagenow == 'options-general.php') { // Vérifie si l'utilisateur est sur une page spécifique
// Vérifier l'option exacte
if (isset($_GET['page']) && $_GET['page'] == 'specific-setting') {
return; // Laisse l'utilisateur accéder à cette page spécifique
} else {
wp_redirect(admin_url()); // Redirige si l'utilisateur essaie d'accéder à une autre page
exit;
}
}
}
}
add_action('admin_init', 'restrict_access_to_specific_page');
En utilisant ces techniques, vous pouvez personnaliser les permissions d’accès de manière très fine, permettant à un rôle utilisateur spécifique de ne voir et modifier que les parties de l’administration que vous jugez nécessaires.