Hola @BinaryBit:
No es de extrañar que estés un poco frustrado; El menú de administración es una de las implementaciones más obtusas y frustrantes a través del núcleo de WordPress. Honestamente, no sé lo que estaban pensando cuando lo diseñaron de esa manera.
@EAMann hizo un excelente trabajo al explicar cómo funcionan los menús de administración en WordPress (ojalá hubiera podido leer eso hace unos 4 meses ... :)
Aún así, después de descubrir cómo funcionaba, aún no sabía cómo trabajar con él sin dedicar el tiempo suficiente para mantener la cabeza recta mientras intentaba hacer cosas simples. Por eso construí una API de menú que simplifica y agiliza el trabajo con el menú de administración de WordPress.
Son 100% compatibles con las estructuras existentes de WordPress y aún están en alfa ya que he sido el único que lo usa. Estoy seguro de que hay casos de uso que aún no manejan. Pero publicaré el código aquí para que usted y otros lo prueben.
Puede descargar el archivo para colocarlo en el directorio de su tema aquí: wp-admin-menu-classes.php y lo que sigue muestra cómo puede llamar a las funciones en el functions.php
archivo de su tema :
<?php
require_once('wp-admin-menu-classes.php');
add_action('admin_menu','my_admin_menu');
function my_admin_menu() {
swap_admin_menu_sections('Pages','Posts'); // Swap location of Posts Section with Pages Section
rename_admin_menu_section('Media','Photos & Video'); // Rename Media Section to "Photos & Video"
delete_admin_menu_section('Links'); // Get rid of Links Section
$movie_tags_item_array = get_admin_menu_item_array('Movies','Movie Tags'); // Save off the Movie Tags Menu
update_admin_menu_section('Movies',array( // Rename two Movie Menu Items and Delete the Movie Tags Item
array('rename-item','item'=>'Movies','new_title'=>'List Movies'),
array('rename-item','item'=>'Add New','new_title'=>'Add Movie'),
array('delete-item','item'=>'Movie Tags'),
));
copy_admin_menu_item('Movies',array('Actors','Add New')); // Copy the 'Add New' over from Actors
renamed_admin_menu_item('Movies','Add New','Add Actor'); // Rename copied Actor 'Add New' to 'Add Actor
add_admin_menu_item('Movies',array( // (Another way to get a 'Add Actor' Link to a section.)
'title' => 'Alt Add Actor ',
'slug' => 'post-new.php?post_type=actor',
), array(// Add Back the Movie Tags at the end.
'where'=>'end'
));
add_admin_menu_item('Movies',$movie_tags_item_array,array(// Add Back the Movie Tags at the end.
'where'=>'end'
));
delete_admin_menu_section('Actors'); // Finally just get rid of the actors section
}
Además, estas funciones están incluso bajo consideración (como base) para su inclusión en WordPress 3.1, por lo que, si tenemos suerte, ¡incluso podrían convertirse en estándar!
Aquí hay un tutorial rápido de cómo se construye el menú de administración de WordPress: no estoy hablando de la
add_menu_page
API, me refiero al menú predeterminado de WordPress.Llamar al archivo de menú
El menú es, obviamente, cargado por
wp-admin/admin.php
. Pero no se carga a través de la API estándar que estamos acostumbrados a usar según la documentación de WordPress. Por el contrario, todo el menú (todas las opciones posibles, submenús, etc.) se cargan a través de una matriz simple que se define enwp-admin/menu.php
.Entonces, para cargar el sistema de menús,
admin.php
solorequire
smenu.php
... alrededor de la línea 99 en WordPress 3.0.Cargando el menú
El menú en sí se almacena en la matriz global
$menu
. De acuerdo con la documentación en línea, la matriz del menú tiene estos elementos:El tablero, por ejemplo, es:
El archivo pasa y carga cada elemento de menú en la matriz y carga todos sus elementos de submenú en una matriz llamada
$submenu
índices basados en la url del menú principal. Entonces, el elemento del submenú del Tablero llamado "Tablero" es:Después de que el sistema haya terminado de cargar todos los menús (no hay tantos, pero el sistema pasa por el índice en 5 o 10 a la vez ... observe que el Tablero, aunque es el primer elemento del menú, todavía está indexado como elemento "2" (las matrices PHP comienzan en el índice 0 ... así que esto le da un poco de margen de maniobra).
En este punto, el sistema llama
wp-admin/includes/menu.php
.Pasando por el menú
Este tercer archivo recorre cada elemento del menú y, según los privilegios asignados al usuario actual, utiliza el menú o lo elimina. Primero, recorre todos los submenús y elimina las páginas a las que el usuario no puede acceder. Luego recorre las páginas principales y hace lo mismo. Luego, elimina los separadores duplicados que quedan de haber eliminado los menús.
Finalmente, ordena los menús según su orden de menú asignado.
Ordenar menús personalizados
Se
admin_menu
llama al gancho después de configurar los menús, pero antes de ordenar algo. Por lo tanto, es posible ordenar todo el sistema de menús de WordPress sin "hackear" la API.Una vez que se activa la acción
admin_menu
, sus páginas personalizadas se cargan en el sistema. Lo siguiente que sucede es que WordPress comprueba un filtro llamadocustom_menu_order
... este filtro siempre se devuelvefalse
y le dice a WordPress si desea o no usar un pedido personalizado.Agregue lo siguiente a su tema para establecer la bandera en su
true
lugar y defina su orden explícito de menú:Especifique el orden que desea para todos los menús (proporcioné referencias al archivo de carga del menú para que pueda obtener una lista de nombres de archivos) y esto debería encargarse de ello.
EDITAR (2/9/2010):
Para especificar el orden de la pantalla de edición de un tipo de publicación personalizado utilizando este método, debe conocer la URL de la pantalla de edición. En la mayoría de los casos, lo será
http://blog.url/wp-admin/edit.php?post_type=POST_TYPE
. Esto depende de cómo se configura WordPress en su sitio (si está instalado en la raíz o en una subcarpeta) y el slug del tipo de publicación personalizada que está utilizando.Por ejemplo...
Supongamos que tiene un tipo de publicación personalizado para 'Preguntas de intercambio de pila' y desea que el editor aparezca en la misma sección que el tablero directamente debajo del icono del tablero. Usaría el siguiente código en el
functions.php
archivo de su tema :El resto del menú no se verá afectado, pero su página de edición personalizada se moverá a la misma sección que el tablero y aparecerá inmediatamente debajo de ella. Puede usar esto para mover sus tipos de publicaciones personalizadas a cualquier sección del menú de administración y colocarlas en cualquier orden. También puede mover elementos de menú estándar de la misma manera.
Solo asegúrese de especificar el orden de todos los elementos del menú en la sección dada , de lo contrario su menú podría estar sujeto a alguna rareza inesperada.
fuente
$
en el nombre de la variable ... (Gran respuesta, aunque) ..Me doy cuenta de que este es un hilo viejo, pero creo que vale la pena actualizarlo con una solución MUCHO más fácil. Tenga en cuenta que esto funciona con 3.5 y no se ha probado con ninguna otra versión. El siguiente código se puede colocar en un complemento o en el archivo functions.php.
Ver: http://codex.wordpress.org/Plugin_API/Filter_Reference/menu_order . Modificado ligeramente para satisfacer las necesidades del póster original (aunque espero que haya encontrado una solución por ahora ...).
No se eliminarán los elementos del menú de administración que no se enumeran aquí. Se agregarán a la parte inferior del menú.
fuente
Entiendo que no desea usar un complemento, pero por pura simplicidad, pruebe el complemento Admin Menu Editor de Janis Elsts. Reorganice sus menús de administrador de la forma que desee; También puede ocultar elementos del menú.
fuente
Para mover los elementos del menú, me gusta usar la
$menu
variable Global .Por ejemplo, si quisiera mover el menú "Páginas" al final de los menús, usaría esto
functions.php
o un complemento:y si quisiera intercambiar los menús Publicaciones y Enlaces:
He estado usando este truco un poco, solo lo probé con WP 3.4.1
fuente
admin_menu_items
función que se corrigió reemplazándola porunset($menu[20]);
Increíble. Muchas gracias. Acabo de poner algunas líneas de código en mis funciones.php
Además, coloca el wp-admin-menu-classes.php en mi carpeta de temas y ahora el botón de 'publicaciones' se intercambia con el botón de 'páginas'.
Espero que esto se convierta en parte del núcleo pronto y de alguna manera para que no necesitemos escribir todo el menú dentro de una función para reordenar dos botones.
De hecho, fue un poco complicado obtener un orden más específico para 4 botones. Para cambiar los 4 botones a: Páginas, Publicaciones, Medios, Enlaces, necesitaba usar el siguiente código:
fuente