Ordenar itens de menu Admin
3 respostas
- votos
-
- 2013-01-08
Pode serfeito Classificando o Global
$ Submenu
.A classificação aplicada redefine onúmero chave do sub-array
$ submenu ['Opções-General.php']
,que é:Array 'Opções-General.php'=> variedade 10=> variedade 0=> String 'General' 1=> String 'Manage_Options' 2=> String 'Opções-General.php' 15=> variedade 0=> string 'escrita' 1=> String 'Manage_Options' 2=> string 'Opções -escrita.php' //etc.
e setorna:
Array 'Opções-General.php'=> variedade 0=> variedade 0=> String 'Discussão' 1=> String 'Manage_Options' 2=> String 'Opções-discussion.php' 1=> variedade 0=> String 'General' 1=> String 'Manage_Options' 2=> String 'Opções-General.php' //etc.
Aqui,estamos considerando o comprimento dositenspadrãoiguais a seis. Antes do WordPress 3.5,havia 7itens, Privacidade agora sefoie incorporado com aguia ler .
Testando localmente,issonãoproduznenhum resultadoinesperadoe funciona ok. Talvez se umplugin dependesse
$ submenu ['Opções-General.php'] [15]
paraposicionar-se ou algomais,osinsetospoderiam acontecer.Otipoestá sendo aplicado separadamentepara ositenspadrãoe para o resto deles. Basta desativar o
Usort
doprimeiroblocoe vocêterá sua saída desejada.add_action ('admin_menu','sort_settings_menu_wpse_2331',999); Função sort_settings_menu_wpse_2331 () { Global $ submenu; //ordenamitenspadrão $ Padrão=Array_Slice ($ submenu ['Opções-General.php'],0,6,true); Usort ($padrão,'sort_arra_asc_so_1597736'); //classificar o resto dositens $ duração=contagem ($ submenu ['opções-general.php']); $extra=array_slice ($ submenu ['Opções-General.php'],6,$ comprimento,true); Usort ($extra,'sort_arra_asc_so_1597736'); //Aplicar $ submenu ['Opções-General.php']=array_merge ($padrão,$extra); } //http://stackoverflow.com/a/1597788/1287812. Função sort_arra_asc_so_1597736 ($item1,$item2) { if ($item1 [0]==$item2 [0]) retorne 0; retorno ($item1 [0] > $item2 [0])? 1: -1; }
.
It can be done sorting the global
$submenu
.The sorting that's applied resets the key number of the sub-array
$submenu['options-general.php']
, which is:array 'options-general.php' => array 10 => array 0 => string 'General' 1 => string 'manage_options' 2 => string 'options-general.php' 15 => array 0 => string 'Writing' 1 => string 'manage_options' 2 => string 'options-writing.php' // etc
and becomes:
array 'options-general.php' => array 0 => array 0 => string 'Discussion' 1 => string 'manage_options' 2 => string 'options-discussion.php' 1 => array 0 => string 'General' 1 => string 'manage_options' 2 => string 'options-general.php' // etc
Here, we are considering the length of the default items equal to six. Prior to WordPress 3.5, there were 7 items, Privacy is now gone and embedded with the Reading tab.
Testing locally, this doesn't produce any unexpected result and works ok. Maybe if a plugin depended on
$submenu['options-general.php'][15]
to position itself or something else, bugs could happen.Sort is being applied separately for the default items and for the rest of them. Just disable the
usort
of the first block and you have your desired output.add_action( 'admin_menu', 'sort_settings_menu_wpse_2331', 999 ); function sort_settings_menu_wpse_2331() { global $submenu; // Sort default items $default = array_slice( $submenu['options-general.php'], 0, 6, true ); usort( $default, 'sort_arra_asc_so_1597736' ); // Sort rest of items $length = count( $submenu['options-general.php'] ); $extra = array_slice( $submenu['options-general.php'], 6, $length, true ); usort( $extra, 'sort_arra_asc_so_1597736' ); // Apply $submenu['options-general.php'] = array_merge( $default, $extra ); } //http://stackoverflow.com/a/1597788/1287812 function sort_arra_asc_so_1597736( $item1, $item2 ) { if ($item1[0] == $item2[0]) return 0; return ( $item1[0] > $item2[0] ) ? 1 : -1; }
-
- 2010-09-29
Euestavaprocurando amesma coisae imaginei que copiaria códigofornecidopor Mike abaixo da qualele afirma ainda émuitoem Alpha,já que é sóele que vem usando.
Eutesteie parecefuncionarbem paramim. Tenho certeza que há casos de uso queeles aindanão lidam.
Talvez o Mike comentará aquie fornecerá ajuda adicional sobre como vocêpode usar sua aulapara atingir seus objetivos.
Vocêpodebaixar o arquivopara quedano diretório do seutema aqui: https://gist.github.com/792b7aa5b695d1092520
O que segue abaixomostra como vocêpode chamar asfunçõesno arquivo Functions.php do seutema:
<?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,essasfunções sãomesmo sob consideração (comobase)parainclusãono WordPress 3.1 Então,setivermos sorte,issopode setornarpadrão!
I was looking for the same thing and figured I would copy code provide by Mike below which he claims is still very much in alpha since its only been him that has been using it.
I have tested it and it seems to work well for me. I'm sure there are use-cases they do not yet handle.
Maybe Mike will comment in here and provide additional help on how you can use his class to achieve your goals.
You can download the file to drop in your theme's directory here: https://gist.github.com/792b7aa5b695d1092520
What follows below shows how you might call the functions in your theme's functions.php file:
<?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 }
What's more, these functions are even under consideration (as a base) for inclusion in WordPress 3.1 so if we're lucky these might even become standard!
-
Parece um ótimo código,masnão vejo ondeele classifica automaticamente sub-entradas.It sounds like a great bit of code, but I don't see where it automatically sorts sub-entries.
- 0
- 2010-09-30
- dgw
-
- 2017-09-07
Achei queissopoderia ser útil como outra opção. Aquiestá um simples Usortno Global $ Submenu. Eu uso admin_initgancho,porque admin_menu aindapodeter outrosplugins adicionandoitens de submenu (nomeu caso,entãoissoeramuito cedoparafazer classificação). Observetambém afunção anônima (lambda)no USORT requer PHP 5.3 +.
<?php add_action('admin_init','my_admin_init'); function my_admin_init() { global $submenu; $submenu_key = 'my_key'; // See note below on $submenu_key if ( array_key_exists( $submenu_key, $submenu ) ) { // alphabetize submenu items usort( $submenu[ $submenu_key ], function ( $a, $b ) { // format of a submenu item is [ 'My Item', 'read', 'manage-my-items', 'My Item' ] return strcasecmp( $a[0], $b[0] ); } ); } }
Observe que
$submenu_key
é$parent_slug
em add_submenu_page ,que é omesmo que$menu_slug
em add_menu_pageThought this could be useful as another option. Here is a simple usort on the global $submenu. I use admin_init hook, because admin_menu may still have other plugins adding submenu items (in my case it did, so that was too early to do sorting). Also note the anonymous (lambda) function in the usort requires PHP 5.3+.
<?php add_action('admin_init','my_admin_init'); function my_admin_init() { global $submenu; $submenu_key = 'my_key'; // See note below on $submenu_key if ( array_key_exists( $submenu_key, $submenu ) ) { // alphabetize submenu items usort( $submenu[ $submenu_key ], function ( $a, $b ) { // format of a submenu item is [ 'My Item', 'read', 'manage-my-items', 'My Item' ] return strcasecmp( $a[0], $b[0] ); } ); } }
Note that
$submenu_key
is$parent_slug
in add_submenu_page, which is the same as$menu_slug
in add_menu_page.-
Bome compacto.O que é `$ submenu_key 'representando?É o que o WordPress chama o `$pai slug`no [add_submenu_page] (https://developer.wordpress.org/reference/functions/add_submenu_page/) docs?Nice and compact. What is `$submenu_key` representing? Is that what WordPress calls the `$parent slug` in the [add_submenu_page](https://developer.wordpress.org/reference/functions/add_submenu_page/) docs?
- 1
- 2017-09-08
- random_user_name
-
@Cale_B Grandepergunta!Vocêestá correto,é `$parent_slug`em add_submenu_page docs,que é omesmo que` $menu_slug`em add_menu_page.@cale_b Great question! You are correct, it is `$parent_slug` in add_submenu_page docs, which is the same as `$menu_slug` in add_menu_page.
- 0
- 2017-09-08
- ryanm
em umanota relacionadapara " Alterar a ordem das seções domenu Admin? "Estou àprocura de umamaneira de classificarem ordem alfabética asentradasem cada subseção da área de administração do WordPress.
Atualmente,sempre que umnovopluginfor adicionado,suaentrada apareceráem um local aparentemente aleatórioem Configurações/ferramentas/plugins,e muitas vezes é difícil localizar onovoitem demenu. (Eujátenhomuitosplugins,entãomeusmenusestãomuito cheios.)
Sendo queeu adicionoe removo osplugins razoavelmente regularmente,euprefironãoprecisarir continuamenteirpara apágina de configuraçõespara umplugin depedidos demenue ajustar opedido.
Desculpepela longapergunta; Eu só quero deixar claro o queestouprocurando.
Exemplo
em vez de:
Possoter omenu classificado alfabeticamente (oupor outrométodo lógico),e.:
Melhor seria ummétodo de classificação quemantém asentradasprincipais ondeelas sãoporpadrãoe somente classifica ositens adicionadosporplugins: