Menú de administración de WordPress: reordenación del submenú
Una de las cosas de trabajar con la API del menú de WordPress (es decir, add_menu_page, add_submenu_page y similares) es que no facilita reordenar los elementos del submenú.
Claro, para ciertas cosas, como taxonomías o cosas por el estilo, puede cambiar el orden en que se registran. Pero supongamos que tiene un menú de administración de WordPress y luego algunas páginas de submenú en ese menú en particular.
De forma predeterminada, WordPress crea el menú de nivel superior y luego crea inmediatamente un elemento de submenú debajo del menú de nivel superior que se vincula a la misma página. En muchos casos, esto puede ser ideal.
En algunos casos, sin embargo, es posible que desee cambiar eso.
Menú de administración de WordPress
Para dar un ejemplo de cuándo es posible que desee cambiar algo, podría ser algo como esto:
- Tiene un menú de nivel superior que está destinado a ofrecer opciones después de conectarse con una API de terceros,
- La API de terceros requiere una clave API (o alguna otra autenticación), por lo que primero debe proporcionar la configuración para eso,
- ¿Por qué no hacer que el primer elemento del menú sea la Configuración y el segundo elemento del menú las Herramientas API reales?
Por supuesto, cuando no se ha establecido la configuración, también es útil mostrar un mensaje en el menú principal de herramientas de API que indica que el usuario debe hacer clic en la página Configuración para ingresar su configuración.
Pero eso está más allá del alcance de esta publicación. Por ahora, aquí hay una forma de administrar el reordenamiento del menú desde el lado del servidor. Primero el código, luego la explicación.
<?php
add_action('custom_menu_order', __NAMESPACE__.'acmeReorderSubmenuItems);
/**
* Reorders the menu by placing the second item before the first item.
*/
function acmeReorderSubmenuItems()
{
global $submenu;
$newSubmenu = [];
foreach ($submenu as $menuName => $menuItems) {
if ('acme-api-tools' === $menuName) {
$newSubmenu[0] = $menuItems[1];
$newSubmenu[1] = $menuItems[0];
$submenu['acme-api-tools'] = $newSubmenu;
break;
}
}
}
En términos generales, estoy usando esto en el contexto de un objeto con espacio de nombres, pero para esta publicación, lo estoy relegando a una función que existe en un espacio de nombres.
Algunas cosas a tener en cuenta:
- Estoy usando el gancho custom_menu_order que es un lugar ideal para trabajar en los elementos del menú en WordPress,
- Estoy buscando específicamente el submenú acme-api-tools en la clave $menuName de la variable de matriz $submenu ,
- Creo una matriz, $newSubmenu, y luego cambio los elementos y asigno el nuevo submenú al submenú existente identificado por la clave.
Hay algunos comentarios, quizás incluso problemas (o al menos consideraciones serias), con este enfoque.
Es decir, el código espera saber con precisión la clave con la que queremos trabajar. En algunos casos, esto está bien, pero si está buscando modificar un menú para el cual no conoce la clave (como acme-api-tools ), entonces necesitará modificar esto.
A continuación, esto también supone que solo hay dos elementos de menú para intercambiar. Es bastante fácil en el caso anterior, pero si hubiera más, entonces probablemente necesitaría una función para manejar las cosas y devolver la nueva matriz.
Suficiente para empezar
Dicho esto, la funcionalidad anterior debería brindar suficiente información sobre al menos cómo comenzar a hacer esto, si no más, y luego cómo manipular la matriz de submenú que está visible.