web-dev-qa-db-fra.com

Suppression d'une page d'administrateur ajoutée par un plugin tiers. Les formes de gravité dans cet exemple

J'essaie de cacher une page d'aide aux éditeurs, ajoutée par le gravity forms plugin. Je pense avoir déjà rencontré le même problème avec d’autres plugins, alors je voudrais savoir comment le faire pour les plugins tiers. C'est ce que j'ai jusqu'ici qui ne fonctionne pas. Cela fonctionne bien sûr pour les autres menus WP. Je me demande donc si la fonction est limitée aux menus WP?

function remove_menu_links() {
  if( !current_user_can('manage_options') ) {
    remove_menu_page('admin.php?page=gf_help'); // this is the pages url
  }
}
add_action( 'admin_menu', 'remove_menu_links');
3
Andrew

Ok, Eugene's Answer fonctionne dans le cas d'un plugin qui ne gère pas les fonctionnalités personnalisées.

http://codex.wordpress.org/Roles_and_Capabilities
La API WordPress Plugin permet l’ajout, la suppression et la modification de rôles et de fonctionnalités. Étant donné que les plug-in peuvent modifier les rôles et les fonctionnalités, seuls les paramètres par défaut sont abordés dans cet article.


Donc, si son code fonctionne sans vérifier la capacité, nous devons regarder comment GravityForms exécute son action add_submenu_page.
Et pour cela, nous déposons tout le dossier du plug-in dans un bon éditeur de code (Bloc-notes ++, TextMate, etc.) et faisons une recherche globale pour trouver notre matériel.

// wp-content/plugins/gravityforms/gravityforms.php
// all parameters removed from the original code, except $page_title and $capability
add_submenu_page( 
    $parent_slug, 
    __("Help", "gravityforms"),
    $menu_title,
    $has_full_access ? "gform_full_access" : $min_cap, 
    $menu_slug, 
    $function 
);

Et quelques lignes avant de voir:

$has_full_access = current_user_can("gform_full_access");
$min_cap = GFCommon::current_user_can_which(GFCommon::all_caps());
if(empty($min_cap))
    $min_cap = "gform_full_access";

Nous allons maintenant poursuivre avec Members plugin, ce que btw GF reconnaît, et nous avons les éléments suivants dans son écran de configuration pour le rôle d’éditeur.
MAIS NOTANT gform_full_access n'apparaît pas dans cette liste. Il doit être ajouté manuellement via l'interface du plugin ...

enter image description here

Après cela et en marquant la capacité d'accès complet, le remove_submenu_page fonctionne comme prévu pour le rôle d'éditeur.



Code de référence pour tous les sous-menus (le premier menu est le premier).

function remove_menu_links() {
    if( !current_user_can( 'manage_options' ) ) {
        // remove_submenu_page( 'gf_edit_forms', 'gf_edit_forms' ); 
        // remove_submenu_page( 'gf_edit_forms', 'gf_new_form' ); 
        // remove_submenu_page( 'gf_edit_forms', 'gf_new_formf_help' ); 
        // remove_submenu_page( 'gf_edit_forms', 'gf_entries' ); 
        // remove_submenu_page( 'gf_edit_forms', 'gf_settings' ); 
        // remove_submenu_page( 'gf_edit_forms', 'gf_export' ); 
        // remove_submenu_page( 'gf_edit_forms', 'gf_update' ); 
        // remove_submenu_page( 'gf_edit_forms', 'gf_addons' ); 
        remove_submenu_page( 'gf_edit_forms', 'gf_help' ); 
    }
}
add_action( 'admin_menu', 'remove_menu_links', 9999 );

Plugin d'intérêt

Adminimize Est-ce que cela cache la magie en un clin d'œil et est complètement PRO.

3
brasofilo

Vous devez ajouter votre crochet à la fin de la file d'attente, puis supprimer le menu par slug:

function remove_menu_links() {
    if( !current_user_can( 'manage_options' ) ) {
        remove_menu_page( 'gf_edit_forms' ); // this is the pages url
    }
}
add_action( 'admin_menu', 'remove_menu_links', 9999 );

Si vous souhaitez supprimer le sous-menu, vous devez utiliser l'extrait suivant:

function remove_menu_links() {
    if( !current_user_can( 'manage_options' ) ) {
        remove_submenu_page( 'gf_edit_forms', 'gf_help' ); 
    }
}
add_action( 'admin_menu', 'remove_menu_links', 9999 );
8
Eugene Manuilov

Cela me rendait fou. Les réponses fournies ici m'ont permis de faire presque tout le chemin, mais cet élément de menu particulièrement particulier de Gravity Forms est un peu étrange.

J'ai réussi à aller à la racine en analysant la variable globale $ submenu qui contient toutes les données du menu. L'extrait suivant devrait tuer l'élément de sous-menu de mise à jour pour vous, lorsqu'il est connecté à admin_menu () comme indiqué ci-dessus :)

remove_submenu_page( 'gf_edit_forms', 'gf_update' ); 
1
user14386

Le plug-in GravityForms renomme l'élément de menu de niveau supérieur pour correspondre au premier du sous-menu.

Par exemple; Si vous n'avez ajouté que la capacité gravityforms_view_entries au rôle d'éditeur, le premier élément de sous-menu sera "Entrées". Le menu parent sera donc "gf_entries" et non "gf_edit_forms". Ainsi, le code suivant supprimera l'élément "Aide" du sous-menu destiné aux rédacteurs disposant uniquement de cette fonctionnalité:

function remove_menu_links() {
    remove_submenu_page( 'gf_entries', 'gf_help' );
}
add_action( 'admin_menu', 'remove_menu_links', 9999 )
;

J'espère que cela t'aides.

1
D-B