WordPress Hosting

mover todos menus no wordpress herramientas

¿Se pueden ocultar todos los menús de administración que añaden plugins y temas a WordPress?

¿Tú también te has hartado ya de que cualquier plugin o el tema decidan dónde poner sus menús y submenús, abarrotando el escritorio de administración de TU WordPress?

Pues eso se ha acabado pero ya, sin contemplaciones, aquí tienes la solución, o soluciones.

Un código para someterlos a (casi) todos

Mira que pensé andar dándole vueltas a esto de los menús y crear una función personalizable, pero cuando llegas a este punto de hartazgo de menús, lo que te pide el cuerpo son soluciones radicales, y eso es lo que he preparado.

El siguiente código mueve TODOS los menús que no sean nativos de WordPress y, sin pedir permiso ni avisar, a la brava, los mueve todos como submenús de ese menú de la administración de WordPress que tan poco usas, el menú Herramientas. ¿A que he estado fino ahí? 😀

En fin, el código, que me enrollo:

/* Quitar menús principales que no sean de WordPress y añadirlos como submenús de Herramientas */
add_action( 'admin_menu', function() {
global $menu, $submenu;
// Lista de slugs que se salvan de la quema - Añade tus propios slugs si quieres excluir el menú o submenú de algún plugin o el tema
$core_menus = [
'index.php',
'edit.php',
'upload.php',
'edit.php?post_type=page',
'edit-comments.php',
'themes.php',
'plugins.php',
'users.php',
'tools.php',
'options-general.php',
];

$position = 99; // Para controlar el orden de los menús y submenús

foreach ( $menu as $item ) {
$slug = isset($item[2]) ? $item[2] : '';

if ( $slug && ! in_array( $slug, $core_menus ) ) {

// Eliminamos los molestos menús principales
remove_menu_page( $slug );

// Añade el menú principal como submenú del nativo de Herramientas
add_submenu_page(
'tools.php', // Aquí el slug de a dónde movemos los molestos menús
$item[0],
$item[0],
$item[1],
$slug,
'', // Callback automático para no tener que definir nombres de menús uno a uno
$position++
);

// Añade los submenús con un pequeño prefijo visual para que se sepa de qué menú son submenús
if ( isset( $submenu[ $slug ] ) && is_array( $submenu[ $slug ] ) ) {
foreach ( $submenu[ $slug ] as $subitem ) {
if ( $subitem[2] === $slug ) continue; // Evita duplicar el principal

add_submenu_page(
'tools.php', // Aquí el slug de a dónde movemos los molestos menús
$subitem[0],
'— ' . strip_tags($item[0]) . ': ' . $subitem[0],
$subitem[1],
$subitem[2],
'', // Callback automático para no tener que definir nombres de menús uno a uno
$position++
);
}
}
}
}
}, 99 );

¿Que qué hace esto?  Pues lo dicho, quita de la barra de menús de administración de TU WordPress todos los menús que no sean los nativos de WordPress y los mueve sin piedad bajo el menú nativo de herramientas.

O sea, pasamos de esto…

menus admin wordpress de plugins y tema

A esto otro … donde has recuperado el control de tu escritorio de WordPress, y hasta la alegría de vivir…

escritorio wordpress con solo menus nativos

¿Qué dónde están ahora los menús de tus plugins o el tema? Pues bien ordenaditos, ocupando un espacio humilde, tímido, sumiso a ti, su líder supremo, como submenús de las herramientas…

¿Se pueden hacer cambios en el código?

Se me ocurren 2 cambios bastante lógicos que podrías querer hacer:

  1. Cambiar el menú de acogida, para que no sea el de herramientas.
  2. Excluir algunos menús a los quieras perdonar, y que no se oculten bajo el menú de herramientas.

Un ejemplo de lo primero, moviendo todos los menús de plugins y el tema como submenús del menú de plugins de WordPress (en rojo lo que cambia) sería así:

/* Quitar menús principales que no sean de WordPress y añadirlos como submenús de plugins */
add_action( 'admin_menu', function() {
global $menu, $submenu;
// Lista de slugs que se salvan de la quema - Añade tus propios slugs si quieres excluir el menú o submenú de algún plugin o el tema
$core_menus = [
'index.php',
'edit.php',
'upload.php',
'edit.php?post_type=page',
'edit-comments.php',
'themes.php',
'plugins.php',
'users.php',
'tools.php',
'options-general.php',
];

$position = 99; // Para controlar el orden de los menús y submenús

foreach ( $menu as $item ) {
$slug = isset($item[2]) ? $item[2] : '';

if ( $slug && ! in_array( $slug, $core_menus ) ) {

// Eliminamos los molestos menús principales
remove_menu_page( $slug );

// Añade el menú principal como submenú del nativo de Herramientas
add_submenu_page(
'plugins.php', // Aquí el slug de a dónde movemos los molestos menús
$item[0],
$item[0],
$item[1],
$slug,
'', // Callback automático para no tener que definir nombres de menús uno a uno
$position++
);

// Añade los submenús con un pequeño prefijo visual para que se sepa de qué menú son submenús
if ( isset( $submenu[ $slug ] ) && is_array( $submenu[ $slug ] ) ) {
foreach ( $submenu[ $slug ] as $subitem ) {
if ( $subitem[2] === $slug ) continue; // Evita duplicar el principal

add_submenu_page(
'plugins.php', // Aquí el slug de a dónde movemos los molestos menús
$subitem[0],
'— ' . strip_tags($item[0]) . ': ' . $subitem[0],
$subitem[1],
$subitem[2],
'', // Callback automático para no tener que definir nombres de menús uno a uno
$position++
);
}
}
}
}
}, 99 );

El resultado queda así:

menus plugins bajo menu plugins

Y este sería un ejemplo de lo segundo, en esta ocasión salvando al menú de productos y el de eventos, por mera eficiencia, de WooCommerce y The Events Calendar respectivamente  (cambios también en rojo):

/* Quitar menús principales que no sean de WordPress menos los de productos y eventos y añadirlos como submenús de Herramientas */
add_action( 'admin_menu', function() {
global $menu, $submenu;
// Lista de slugs que se salvan de la quema - Añade tus propios slugs si quieres excluir el menú o submenú de algún plugin o el tema
$core_menus = [
'index.php',
'edit.php',
'upload.php',
'edit.php?post_type=page',
'edit-comments.php',
'themes.php',
'plugins.php',
'users.php',
'tools.php',
'options-general.php',
'edit.php?post_type=product',
'edit.php?post_type=tribe_events',
];

$position = 99; // Para controlar el orden de los menús y submenús

foreach ( $menu as $item ) {
$slug = isset($item[2]) ? $item[2] : '';

if ( $slug && ! in_array( $slug, $core_menus ) ) {

// Eliminamos los molestos menús principales
remove_menu_page( $slug );

// Añade el menú principal como submenú del nativo de Herramientas
add_submenu_page(
'tools.php', // Aquí el slug de a dónde movemos los molestos menús
$item[0],
$item[0],
$item[1],
$slug,
'', // Callback automático para no tener que definir nombres de menús uno a uno
$position++
);

// Añade los submenús con un pequeño prefijo visual para que se sepa de qué menú son submenús
if ( isset( $submenu[ $slug ] ) && is_array( $submenu[ $slug ] ) ) {
foreach ( $submenu[ $slug ] as $subitem ) {
if ( $subitem[2] === $slug ) continue; // Evita duplicar el principal

add_submenu_page(
'tools.php', // Aquí el slug de a dónde movemos los molestos menús
$subitem[0],
'— ' . strip_tags($item[0]) . ': ' . $subitem[0],
$subitem[1],
$subitem[2],
'', // Callback automático para no tener que definir nombres de menús uno a uno
$position++
);
}
}
}
}
}, 99 );

El resultado, este:

menus plugins como submenu herramientas con exclusiones

¿Y si algún menú se «resiste» a dejarse mover?

Puede pasar que algunos menús de plugins no se dejen mover, y en este caso tendrás que generar un código diferente que…

  1. Elimine el menú existente.
  2. Cree el menú del plugin como submenú debajo del menú de herramientas.

Un ejemplo típico es el menú del plugin Jetpack, y se hacía así:

/* Mover menú de administración de Jetpack como submenú de herramientas */
add_action( 'admin_menu', function() {
// Elimina el menú principal de Jetpack
remove_menu_page( 'jetpack' );

// Añade Jetpack como submenú bajo Herramientas
add_submenu_page(
'tools.php', // Superior: Herramientas
'Jetpack', // Título de la página
'Jetpack', // Título en el menú
'manage_options', // Capability (puedes cambiarlo si usas otro)
'jetpack', // Slug (el mismo que el original)
'', // Callback (Jetpack ya lo gestiona solo)
120 // Posición (puedes cambiarla si lo quieres antes/después)
);
}, PHP_INT_MAX );

Si te pasa algo así simplemente adapta el código anterior al menú del plugin que se resista en tu caso (y si no te apañas me dices cuál es abajo en los comentarios) y añádelo a continuación del código que hemos visto anteriormente.

¿Cómo y dónde añado estos códigos a mi WordPress?

  1. El cómo lo explico en esta guía de cómo añadir códigos personalizados a WordPress.
  2. El dónde en esta ocasión creo hay que evitar la opción de archivo functions.php del tema hijo, y optar por una de estas otras opciones:

Espero que te haya gustado, sino te espero espada desenvainada en la sección de comentarios (ahí abajo) para lo que guste vuesa merced 😀

Compartir en redes
Resumir con IA

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en las estrellas para valorarlo!

Promedio de puntuación 5 / 5. Total de votos: 5

¡Todavía no hay votos! Sé el primero en valorar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en las redes sociales!

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!



Sobre el autor

Scroll al inicio