Eliminar un elemento de menú creado por un plugin

15 abr 2013, 04:40:05
Vistas: 14.8K
Votos: 8

Estoy intentando eliminar un elemento del menú y he probado varios enfoques, pero sin éxito. Fue creado por un plugin de FAQ.

Si uso esta línea:

remove_menu_page( 'edit.php?post_type=question' );

Eliminará el menú principal, pero solo quiero eliminar dos elementos del submenú contenidos dentro de esa URL edit.php?post_type=question.

Para el elemento que quiero eliminar, la ruta en la barra de URL me muestra lo siguiente:
edit-tags.php?taxonomy=faq-topic&post_type=question
y
edit-tags.php?taxonomy=faq-tags&post_type=question

He probado varias soluciones incluyendo remove_menu_page y remove_submenu_page sin resultado.

Lo que no ha funcionado hasta ahora:

remove_submenu_page( 'edit.php?post_type=question', 'edit-tags.php?taxonomy=faq-topic&post_type=question');
remove_menu_page( 'edit-tags.php?taxonomy=faq-tags') ;
remove_menu_page( 'edit-tags.php?taxonomy=faq-tags&post_type=question') ;
remove_submenu_page( 'edit.php?post_type=question', 'edit-tags.php?taxonomy=faq-topic&post_type=question');
remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=faq-topic&post_type=question');
remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=faq-topic');
remove_submenu_page( 'edit.php', 'edit-tags.php');
4
Comentarios

¿Puedes mostrar parte del código que has intentado?

Pat J Pat J
15 abr 2013 04:45:01

Lo agregué en la parte superior para hacerlo más limpio.

John John
15 abr 2013 04:51:09

¿Estabas usando tus llamadas remove_submenu_page() y remove_menu_page() dentro de un action hook? Mira el ejemplo en la página del Codex.

Pat J Pat J
15 abr 2013 04:53:47

Sí, lo estaba usando dentro de un hook de acción.

add_action( 'admin_menu', 'my_remove_menu_pages' );

function my_remove_menu_pages() { /aquí van esas funciones/ }

John John
15 abr 2013 05:06:50
Todas las respuestas a la pregunta 2
10
11
function remove_submenu() {

    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=faq-topic&post_type=question' );
    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=faq-tags&post_type=question' );
}

add_action( 'admin_menu', 'remove_submenu', 999 );

Por favor lee el Codex. remove_submenu_page() necesita dos parámetros y el hook correcto.

Y muy importante: ¡Usa una prioridad muy, muy, muy alta en tu hook! Si usas una prioridad baja, tu función se ejecutará antes de que los menús sean añadidos. Así que no habrá menú para eliminar. Si usas una prioridad alta, hay una buena probabilidad de que tu función se ejecute después de que los menús hayan sido añadidos.

Esta podría ser la parte complicada.

ACTUALIZACIÓN

Después de instalar e inspeccionar el plugin, encontré la solución. Hay varios problemas y algunas partes complicadas.

Los submenús no se añaden con add_submenu_page(), se añaden con un tipo de post personalizado. Una búsqueda simple por add_submenu_page(), copiar los slugs del menú e intentar eliminarlos tiene que fallar. Tengo que buscar el slug del cpt y usarlo.

Después de global $submenu; var_dump( $submenu ); obtuve este resultado:

[más elementos]
    'edit.php?post_type=question' => 
        array (size=7)
          5 => 
            array (size=3)
              0 => string 'FAQs' (length=4)
              1 => string 'edit_posts' (length=10)
              2 => string 'edit.php?post_type=question' (length=27)
          10 => 
            array (size=3)
              0 => string 'Nueva FAQ' (length=8)
              1 => string 'edit_posts' (length=10)
              2 => string 'post-new.php?post_type=question' (length=31)
          15 => 
            array (size=3)
              0 => string 'Títulos FAQ' (length=9)
              1 => string 'manage_categories' (length=17)
              2 => string 'edit-tags.php?taxonomy=faq-topic&post_type=question' (length=55)
          16 => 
            array (size=3)
              0 => string 'Etiquetas FAQ' (length=8)
              1 => string 'manage_categories' (length=17)
              2 => string 'edit-tags.php?taxonomy=faq-tags&post_type=question' (length=54)
[más elementos]

Ahora fue fácil eliminar los submenús usando edit.php?post_type=question como slug del menú y edit-tags.php?taxonomy=faq-topic&post_type=question / edit-tags.php?taxonomy=faq-tags&post_type=question como slugs de submenú.

Si observas cuidadosamente, el ampersand (&) es una entidad HTML. No es posible simplemente copiar la parte de la URL e insertarla. Así que no puedes eliminar una página de submenú con una URL sin codificar, tiene que estar codificada en URL.

Y aquí está el código final:

add_action( 'admin_menu', 'remove_faq_subpages', 999 );

function remove_faq_subpages() {

    $ptype = 'question';
    remove_submenu_page( "edit.php?post_type={$ptype}", "edit-tags.php?taxonomy=faq-tags&post_type={$ptype}" );
    remove_submenu_page( "edit.php?post_type={$ptype}", "edit-tags.php?taxonomy=faq-topics&post_type={$ptype}" );

}
15 abr 2013 05:15:40
Comentarios

Lamentablemente eso tampoco funcionó. La siguiente captura de pantalla será extremadamente útil. Intenté hacerlo de otra manera... usando las variables en la captura de pantalla, pero no pude hacer que funcione. http://s7.postimg.org/7m36rciob/this_might_help.jpg

John John
15 abr 2013 05:18:52

Aquí hay una mejor captura de pantalla, lo siento, se cortó un poco http://s17.postimg.org/uj18k5vvz/FAQ_help.jpg

John John
15 abr 2013 05:21:55

Abre el plugin, encuentra la línea donde se agregarán los menús con add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function );. Usa el $parent_slug y $menu_slug para eliminar los submenús.

Ralf912 Ralf912
15 abr 2013 05:23:19

También actualicé mi respuesta. La prioridad de tu hook es muy importante porque add_submenu_page() y remove_submenu_page() usan el mismo hook. Asegúrate de que tu remove_submenu_page() se llame lo más tarde posible.

Ralf912 Ralf912
15 abr 2013 05:29:39

Tus comentarios han sido útiles pero sí, no estoy seguro de cómo eliminarlo... incluso después de mirar el faq-manager.php dentro de este plugin.

Estoy usando este plugin: http://wordpress.org/extend/plugins/wordpress-faq-manager/

Vi el $parent_slug que mencionas y $menu_slug pero eso no me ayudó mucho... el $parent_slug que tenemos es correcto pero el $menu_slug es cuestionable... Tal vez puedas resolverlo mirando el plugin mismo.

John John
15 abr 2013 05:39:38

¿Y la solución es...?

Ralf912 Ralf912
15 abr 2013 12:58:31

Tomé el camino fácil y encontré un plugin que pudo hacerlo. Usé Adminimize y pude hacerlo fácilmente.

John John
17 abr 2013 03:35:23

Oh maldición sí, olvidé la posibilidad de usar este plugin. Frank actualizó recientemente el plugin, es muy bueno.

Ralf912 Ralf912
17 abr 2013 13:27:06

Después de todo, encontré las razones por las que todas las soluciones fallaron. Al principio era un tipo de publicación personalizado y no una página de submenú. Y la URL tiene que estar codificada. El símbolo de ampersand (&) simple en la URL no funciona.

Ralf912 Ralf912
17 abr 2013 18:21:40

@Ralf912 gracias. & hizo el truco después de mucho romperme la cabeza.

tsdexter tsdexter
23 nov 2015 06:38:27
Mostrar los 5 comentarios restantes
0

Hacer visible el elemento del menú solo para el administrador:

function hide_admin_menu()
{
    if ( !current_user_can('administrator')) {
        remove_menu_page('wpca');
    }
}

add_action('admin_menu', 'hide_admin_menu', 999);
26 may 2020 13:38:35