Eliminar un elemento de menú creado por un plugin
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');

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}" );
}

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

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

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.

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.

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.

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

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

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.
