8791 sujets

Développement web côté serveur, CMS

Modérateur
Bonjour,

Il me faudrait pouvoir enlever la capacité à des contributeurs sur WordPress de lire les commentaires dans la partie admin. J'ai vérifié dans le codex, il n'y a pas de "capability" à ce sujet (juste la gestion des commentaires). En clair, je souhaiterais que l'onglet "Commentaires" ne s'affiche pas dans l'admin pour les contributeurs.
S'il n'y a vraiment aucune solution pour faire ça en ajoutant une action (add_action()), je compte le faire à la volée avec jquery, même si c'est vraiment une très mauvaise solution...

Merci d'avance Smiley smile

******edit******
L'extension Advanced Access Manager semble pouvoir se charger de ça mais installer une grosse extension juste pour désactiver une "capabicité" ça ne me plaît guère Smiley decu
*****/edit*****
Modifié par jojaba (08 Mar 2014 - 09:56)
Modérateur
Merci pour ta réponse audrasjb.
OK pour faire disparaître l'élément de menu mais comment faire pour éviter qu'un petit malin aille tout de même voir les commentaires en allant visiter l'url /wp-admin/edit-comments.php ?
Je suppose que ce n'est pas possible. Il faudrait peut-être que je regarde le code source de l'admin afin de voir comment chaque section est affichée ou non selon le rôle de l'utilisateur...
Ce que j'ai fait pour enlever l'élément "Commentaires" du menu latéral de l'admin suite à ta proposition :
function remove_comment_menu(){
  $user = wp_get_current_user();
  if (in_array('contributor', $user->roles)) {
    remove_menu_page( 'edit-comments.php' );
    }
}
add_action( 'admin_menu', 'remove_comment_menu' ); 

(à placer dans functions.php du dossier du thème utilisé)
Modifié par jojaba (08 Mar 2014 - 15:24)
Modérateur
Raphi a écrit :
Bonjour, voici l'action que tu cherche :
http://codex.wordpress.org/Plugin_API/Action_Reference/load-(page)


Oui Raphi, c'est exactement ça qu'il me fallait. Génial !
Le code dans functions.php (j'ai décidé de rediriger les contributeurs vers la page d'accueil de l'admin) :
// On retire l'élément de menu "commentaires"
function remove_comments_menu_item(){
    $user = wp_get_current_user();
    if (in_array('contributor', $user->roles)) {
        remove_menu_page( 'edit-comments.php' );
    }
}
add_action( 'admin_menu', 'remove_comments_menu_item' );

// On redirige vers le tableau de bord lors d'une tentative d'accès aux commentaires
function avoid_page_load() {
    $user = wp_get_current_user();
    if (in_array('contributor', $user->roles)) {
        header('location:index.php');
        exit();
    }
}
add_action( 'load-edit-comments.php', 'avoid_page_load' );

Pour information, les derniers commentaires se trouvent également sur la page d'accueil de l'admin, il faudra que je refuse également l'accès à cette page, mais pour présenter un exemple simple et compréhensible, je préfère vous laisser le code ainsi Smiley cligne
Encore un grand merci à vous deux. Smiley smile
Modérateur
Raphi a écrit :

Juste une petite remarque, tu peux utiliser la fonction wp_redirect() à la place de header('location'). Smiley cligne

Merci pour ça Raphi, mais je vois qu'il faut utiliser un chemin absolu pour la redirection avec wp_redirect() (perte de temps inacceptable ! Smiley langue ). Plus sérieusement, cette fonction n'a pas beaucoup d'intérêt dans la section admin, elle semble être plutôt utile pour rediriger une page sur la partie publique de manière "propre" (avec le bon code d'état afin que les moteurs de recherche puissent mettre à jour leurs liens).
Modifié par jojaba (09 Mar 2014 - 19:29)
C'est vrai que je l'utilise principalement pour le front-end et je me suis jamais posé la question concernant l'admin.
Du coup j'aurais écrit ça, mais je sais pas si c'est adapté :
wp_redirect( admin_url() )


Par contre sinon au lieu de faire une redirection, si tu veux utiliser le comportement par défaut de WordPress, c'est à dire afficher un message d'erreur, tu peux utiliser ceci :
wp_die( __( 'You do not have sufficient permissions to access this page.' ) );


Bonne continuation à toi ! Smiley smile