Olá, @BinaryBit:
Não é de admirar que você esteja um pouco frustrado; o menu admin é uma das implementações mais obtusas e frustrantes através do núcleo do WordPress. Honestamente, não sei o que eles estavam pensando quando o projetaram dessa maneira.
O @EAMann fez um excelente trabalho ao explicar como os menus de administração funcionam no WordPress (eu gostaria de poder ler isso há cerca de 4 meses ... :)
Ainda assim, depois que eu descobri como funcionava, ainda não consegui trabalhar com ela, sem dedicar tempo suficiente para manter minha cabeça reta enquanto tentava fazer coisas simples. Por isso, criei uma API de menus que simplifica e simplifica o trabalho com o menu de administração do WordPress.
Eles são 100% compatíveis com as estruturas existentes do WordPress e ainda muito em alfa, já que eu fui o único a usá-lo. Tenho certeza de que existem casos de uso que eles ainda não tratam. Mas postarei o código aqui para você e outras pessoas experimentarem.
Você pode fazer o download do arquivo para soltar no diretório do seu tema aqui: wp-admin-menu-classes.php e o seguinte mostra como você pode chamar as funções no functions.php
arquivo do seu 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
}
Além disso, essas funções ainda estão sendo consideradas (como base) para inclusão no WordPress 3.1; portanto, se tivermos sorte, elas podem se tornar padrão!
Aqui está uma rápida explicação de como o menu de administração do WordPress é criado - não estou falando da
add_menu_page
API, quero dizer o menu padrão do WordPress.Chamando o arquivo de menu
O menu é, obviamente, carregado por
wp-admin/admin.php
. Mas não é carregado pela API padrão que estamos acostumados, com base na documentação do WordPress. Em vez disso, o menu inteiro (todas as opções possíveis, submenus etc.) são carregados por meio de uma matriz simples definida emwp-admin/menu.php
.Então, para carregar o sistema de menus,
admin.php
bastarequire
percorrer amenu.php
linha 99 no WordPress 3.0.Carregando o menu
O próprio menu é armazenado na matriz global
$menu
. De acordo com a documentação em linha, a matriz de menus possui os seguintes elementos:O painel, por exemplo, é:
O arquivo passa e carrega cada item de menu na matriz e carrega todos os itens de submenu em uma matriz chamada
$submenu
indexa com base na URL do menu pai. Portanto, o item do submenu do painel chamado "Painel" é:Depois que o sistema terminar de carregar todos os menus (não há muitos, mas o sistema percorre o índice às 5 ou 10 horas ... observe que o Painel, mesmo sendo o primeiro item de menu, ainda está indexado como item "2" (as matrizes PHP iniciam no índice 0 ... então isso oferece a você espaço de manobra).
Neste ponto, o sistema chama
wp-admin/includes/menu.php
.Percorrendo o menu
Esse terceiro arquivo percorre cada item do menu e, com base nos privilégios atribuídos ao usuário atual, usa o menu ou remove-o. Primeiro, ele percorre todos os submenus e remove as páginas que o usuário não pode acessar. Em seguida, ele percorre as páginas pai e faz a mesma coisa. Em seguida, remove os separadores duplicados que permanecem por terem eliminado os menus.
Por fim, classifica os menus com base na ordem de menus atribuída.
Solicitando menus personalizados
O gancho
admin_menu
é chamado depois que os menus são configurados, mas antes que qualquer coisa seja solicitada. Portanto, é possível solicitar todo o sistema de menus do WordPress sem "invadir" a API.Depois que a ação
admin_menu
é disparada, suas páginas personalizadas são carregadas no sistema. A próxima coisa que acontece é que o WordPress verifica um filtro chamadocustom_menu_order
... esse filtro sempre é retornadofalse
e informa ao WordPress se você deseja ou não usar um pedido personalizado.Adicione o seguinte ao seu tema para definir o sinalizador
true
e defina sua ordem de menu explícita:Especifique a ordem desejada para todos os menus (eu forneci referências ao arquivo de carregamento de menus para obter uma lista de nomes de arquivos) e isso deve ser resolvido.
EDIT (9/2/2010):
Para especificar a ordem da tela de edição de um tipo de postagem personalizado usando esse método, você precisa conhecer o URL da tela de edição. Na maioria dos casos, será
http://blog.url/wp-admin/edit.php?post_type=POST_TYPE
. Isso depende de como o WordPress está configurado no seu site (se estiver instalado na raiz ou em uma subpasta) e na lesma do tipo de postagem personalizada que você está usando.Por exemplo...
Digamos que você tenha um tipo de postagem personalizado para 'Stack Exchange Questions' e deseje que o editor apareça na mesma seção do painel diretamente abaixo do ícone do painel. Você usaria o seguinte código no
functions.php
arquivo do seu tema :O restante do menu não será afetado, mas sua página de edição personalizada será movida para a mesma seção que o painel e aparecerá imediatamente abaixo dele. Você pode usar isso para mover seus tipos de postagem personalizados para qualquer seção do menu do administrador e colocá-los em qualquer ordem. Você também pode mover itens de menu padrão da mesma maneira.
Apenas certifique-se de especificar a ordem de todos os itens de menu na seção fornecida , caso contrário, seu menu poderá estar sujeito a alguma estranheza inesperada.
fonte
$
no nome da variável ... (Ótima resposta) ..Sei que esse é um tópico antigo, mas acho que vale a pena atualizar com uma solução MUITO mais fácil. Observe que isso funciona com o 3.5 e não foi testado com nenhuma outra versão. O código a seguir pode ser colocado em um plug-in ou no arquivo functions.php.
Veja: http://codex.wordpress.org/Plugin_API/Filter_Reference/menu_order . Modificado um pouco para atender às necessidades do pôster original (espero que ele tenha encontrado uma solução agora ...).
Quaisquer itens no menu do administrador que não estejam listados aqui não serão removidos. Eles serão anexados à parte inferior do menu.
fonte
Entendo que você não deseja usar um plug-in, mas, para pura simplicidade, tente o plug-in Admin Menu Editor de Janis Elsts. Reorganize seus menus de administrador da maneira que desejar; também pode ocultar itens de menu.
fonte
Para mover itens de menu, eu gosto de usar a
$menu
variável Global .Por exemplo, se eu quisesse mover o menu "Páginas" para a parte inferior dos menus, usaria isso no
functions.php
ou em um plugin:e se eu quiser trocar os menus Posts e Links:
Utilizo esse truque há algum tempo, apenas testado com o WP 3.4.1
fonte
admin_menu_items
função que foi fixado, substituindo-ounset($menu[20]);
Impressionante. Muito obrigado. Acabei de colocar algumas linhas de código em minhas funções.php
Além disso, coloque o wp-admin-menu-classes.php na minha pasta de temas e agora o botão 'posts' é trocado pelo botão 'pages'.
Espero que isso faça parte do núcleo em breve e de certa forma, para que não precisemos escrever o menu inteiro dentro de uma função para reordenar apenas dois botões.
Na verdade, foi um pouco complicado obter uma ordem mais especificada para 4 botões. Para alterar os botões de 4 para: Páginas, Post, Mídia, Links, eu precisava usar o seguinte código:
fonte