Eliminación de una página de administración agregada por un complemento de terceros. La gravedad se forma en este ejemplo.

3

Estoy tratando de ocultar una página de ayuda a los editores, agregada por el complemento gravity forms . Creo que me he encontrado con el mismo problema antes con otros complementos, así que me gustaría saber la forma correcta de hacerlo para los complementos de terceros. Esto es lo que tengo hasta ahora que no funciona. Por supuesto, funciona para otros menús de WP, así que me pregunto si la función está limitada únicamente a los menús de 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');
    
pregunta Andrew 07.04.2012 - 09:40

4 respuestas

3

Ok, la respuesta de Eugene funciona en el caso de un complemento que no trata con capacidades personalizadas.

  

enlace
  La API del complemento de WordPress permite agregar, eliminar y cambiar roles y capacidades. Dado que los complementos pueden cambiar los roles y las capacidades, en este artículo solo se tratan las predeterminadas.

Entonces, si su código funciona sin verificar la capacidad, tenemos que ver cómo GravityForms ejecuta su acción add_submenu_page .
Y para eso, colocamos toda la carpeta de complementos dentro de un buen editor de código (NotePad ++, TextMate, etc.) y hacemos una búsqueda global y encontramos nuestras cosas.

// 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 
);

Y unas pocas líneas antes de que veamos:

$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";

Ahora continuamos con el complemento Members , que por cierto reconoce GF, y tenemos lo siguiente en su pantalla de configuración para el rol de Editor.
PERO OBSERVANDO QUE gform_full_access no aparece en esta lista. Debe agregarse manualmente a través de la interfaz del complemento ...

Despuésdeesoymarcandolacapacidaddeaccesocompleto,elremove_submenu_pagefuncionacomoseesperaparaelroldeEditor.

Códigodereferenciaparatodoslossubmenús(recordarelprimeroeselmenúsuperior).

functionremove_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);

Complementodeinterés

Adminimize hace esta magia oculta en un abrir y cerrar de ojos y es completamente PRO.

    
respondido por el brasofilo 18.07.2012 - 04:31
8

Debe agregar su enlace al final de la cola y luego eliminar el menú por barra:

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 desea eliminar el submenú, debe usar el siguiente fragmento de código:

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 );
    
respondido por el Eugene Manuilov 07.04.2012 - 09:45
1

Esto me estaba volviendo loco. Las respuestas proporcionadas aquí me permitieron la mayor parte del camino, pero ese elemento del menú Gravity Forms es un poco raro.

Logré llegar a la raíz analizando la variable global $ submenu que contiene todos los datos del menú. El siguiente fragmento de código debería matar el elemento del submenú de actualización, cuando esté conectado a admin_menu () como se indica arriba :)

remove_submenu_page( 'gf_edit_forms', 'gf_update' ); 
    
respondido por el user14386 30.04.2014 - 18:19
1

El complemento GravityForms cambia el nombre del elemento del menú de nivel superior para que coincida con el primero del submenú.

Por ejemplo; si ha agregado solo la capacidad gravityforms_view_entries a la función de Editor, entonces el primer elemento del submenú será "Entradas", por lo que el menú principal será "gf_entries" no "gf_edit_forms". Por lo tanto, el siguiente código eliminará el elemento "Ayuda" del submenú para editores con esa capacidad:

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

Espero que esto ayude.

    
respondido por el D-B 21.11.2014 - 10:38

Lea otras preguntas en las etiquetas