web-dev-qa-db-fra.com

Supprimer des éléments de menu de la page d'administration et limiter les capacités

Par défaut, j'autorise les personnes à s'abonner en tant que contributeurs à mon site, ce qui leur permet certaines actions.

Ce que je veux alors faire est de supprimer les publications, les commentaires, les contacts (ContactForm7) et les outils en ne leur laissant que des options pour ajouter de nouveaux événements (plug-in d'événements).

Je veux aussi être sûr que même si ces boutons sont cachés, les gens ne peuvent pas soumettre ces PostTypes s'ils savent comment faire.

Je suis en train de lire le livre de développement de plugins WordPress professionnels en ce moment et c'est beaucoup à prendre, j'aimerais donc le faire uniquement dans la page des fonctions de mon thème pour le moment.

Voici ce que j'essaye selon le codex:

    add_action( 'admin_menu', 'jh_remove_menu_pages' );
    function jh_remove_menu_pages() {
        remove_menu_page('edit-comments.php');  
        remove_menu_page('tools.php');  
        remove_menu_page('edit.php');   
        remove_menu_page('wp-contact-form-7.php');  
    }

J'ai réussi à trouver sur cette page pour supprimer tous les fichiers php que je dois cacher mais je ne suis pas sûr du fichier ContactForm7. EDIT: Gestion de la recherche de la solution ici pour supprimer le formulaire de contact 7 du menu Admin

Toutefois, selon le codex, le code ci-dessus ne supprime pas les autorisations permettant aux utilisateurs d'accéder directement aux écrans (publications, outils, etc.) et de les soumettre s'ils savaient comment:"Sachez que cela n'empêcherait pas l'utilisateur d'accéder directement à ces écrans. La suppression d'un menu ne remplace pas la nécessité de filtrer les autorisations d'un utilisateur, selon le cas. "

Comment pourrais-je supprimer les fonctionnalités de tout ce qui précède, à l'exception des événements et Profil? Je suis en train de lire remove_cap dans le codex, mais je crains de pouvoir par inadvertance désactiver l'affichage d'événements si je supprime la fonctionnalité Posts?

Et enfin, comment puis-je afficher uniquement les événements associés pour l'utilisateur qui est connecté à ce moment-là?

Merci beaucoup.

1
SixfootJames

Dans votre cas, la meilleure solution consiste à créer votre propre rôle custm et à ne leur attribuer que les fonctionnalités dont vos utilisateurs ont besoin. En ce qui concerne wordpress, d'après ce que je peux comprendre de votre question, la seule possibilité que vous devriez leur donner est read.

De cette façon, ils ne verront que le profil. Les problèmes commencent avec le plugin, vous ne dites pas (ou je ne comprends pas) quel est le plugin que vous utilisez, je ne peux donc pas vous donner une meilleure aide.

Considérez que beaucoup dépend du codage du plug-in: s'il vérifie certaines fonctionnalités standard, par exemple. vous trouvez dans le code quelque chose comme

if ( currrent_user_can('edit_posts') ) { // do stuff

cela signifie que pour que cela fonctionne, vous devez attribuer la limite edit_posts à votre rôle. Mais c'est un problème: si vous attribuez cette capacité, le menu Post de l'administrateur sera affiché. Bien sûr, vous pouvez supprimer cela en utilisant remove_menu_page, mais comme vous l'avez dit en question, cela n'empêche pas les utilisateurs d'accéder directement à ces écrans d'administration s'ils savent comment procéder.

Donc, ce que je vous suggère est:

  1. Créez votre rôle personnalisé, commencez par affecter à celui-ci uniquement la limite read
  2. Consultez la documentation de votre plugin et/ou consultez le code pour savoir quelles fonctionnalités sont nécessaires pour que cela fonctionne.
  3. Ajoutez ces fonctionnalités requises à votre rôle. Si des majuscules standard sont requises (et qu’un menu standard s’affiche, supprimez-les avec remove_menu_page
  4. Dans ce cas, pour empêcher un accès direct, grâce au fait que vous avez créé un rôle personnalisé, vous pouvez empêcher l'accès à l'écran administrateur lié à l'action load-{$page} et empêcher l'accès à votre rôle personnalisé.
  5. Dans le backend, obtenez Settings -> General et transformez 'Rôle personnalisé' en Nouveau rôle par défaut de l'utilisateur

Comment

1) Créer un rôle

$subscriber = get_role( 'subscriber');
$plugin_caps = array('edit_posts', 'cap_required_by_event_plugin');
$all_caps = array_merge($subscriber->capabilities, $plugin_caps);
add_role('custom_role', 'Custom Role', $all_caps );

2) Comprendre la capacité requise par le plugin

Regardez la documentation du plugin. Effectuez une recherche de plusieurs fichiers dans le dossier plugins en recherchant des mots clés tels que 'current_user_can', 'user_can', 'has_cap'. Si vous avez un problème, essayez de demander sur le forum de support du plugin (s'il existe), demandez ici et recherchez-le sur Google. Le développeur est et travaille dur! ;)

3) Ajoutez les fonctionnalités requises à votre rôle

Le moyen le plus simple consiste simplement à ajouter la limite requise au tableau $plugin_caps défini au point 1).

4) Empêcher l'accès à l'écran même si la capacité est associée à un rôle personnalisé

En supposant que vous deviez ajouter la limite edit_posts à votre rôle pour que le plug-in d'événement fonctionne. Tout d'abord supprimer le menu.

add_action( 'admin_menu', 'custom_remove_menu_pages' );

function custom_remove_menu_pages() {
  $user = wp_get_current_user();
  if ( in_array('custom_role', $user->roles) ) {
    remove_menu_page('edit-comments.php');  
    remove_menu_page('tools.php');  
    remove_menu_page('edit.php'); 
  }
}

Puis empêchez l'accès:

add_action( 'load-edit.php', 'custom_prevent_admin_access' );
add_action( 'load-tools.php', 'custom_prevent_admin_access' );
add_action( 'load-post.php', 'custom_prevent_admin_access' );
add_action( 'load-post-new.php', 'custom_prevent_admin_access' );

function custom_prevent_admin_access() {
  $user = wp_get_current_user();
  if ( in_array('custom_role', $user->roles) ) {
    wp_die("Sorry, you can't stay here.");
    exit();
  }
}

5) Définissez 'Rôle personnalisé' comme Nouvel utilisateur par défaut

enter image description here


C'est tout, espérons que cela aide.

3
gmazzap