Admin-Menüpunkte sortieren
3 Antworten
- Stimmen
-
- 2013-01-08
Sie können dasglobale
$submenu
sortieren.Durch die angewendete Sortierung wird die Schlüsselnummer des Unterarrays
$submenu['options-general.php']
zurückgesetzt. Diesist: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
und wird:
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
Hierbetrachten wir die Länge der Standardelementegleich sechs. Vor WordPress 3.5gabes 7 Elemente. Datenschutz istjetzt verschwunden undin die Registerkarte Lesen eingebettet.
Lokale Testsführen zu keinem unerwarteten Ergebnis undfunktioniereneinwandfrei. Wennein Plugin von
$submenu['options-general.php'][15]
abhängt,um sich selbst oderetwas anderes zupositionieren,könnenmöglicherweise Fehler auftreten.Die Sortierung wirdfür die Standardelemente undfür die übrigen Elemente separat angewendet. Deaktivieren Sieeinfach den
usort
desersten Blocks und Sie haben diegewünschte Ausgabe.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; }
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
Ich suchtenach dergleichen Sache und dachtemir,ich würde den von Mikebereitgestellten Code kopieren,von demerbehauptet,dasserimmernoch sehr viel Alphaenthält,danurerihn verwendet hat.
Ich habeesgetestet undes scheintgutfürmich zufunktionieren. Ichbin sicher,dasses Anwendungsfällegibt,dienochnichtbehandelt werden.
Vielleicht wird Mike hiereinen Kommentar abgeben und zusätzliche Hilfegeben,wie Sie seine Klasse verwenden können,um Ihre Ziele zuerreichen.
Sie können die Datei herunterladen,um sie hierim Verzeichnis Ihres Themas abzulegen: https://gist.github.com/792b7aa5b695d1092520
Im Folgenden wirdgezeigt,wie Sie die Funktionenin der Dateifunctions.php Ihres Themas aufrufen können:
<?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 }
Darüber hinaus werden diese Funktionen (als Basis)für die Aufnahmein WordPress 3.1in Betrachtgezogen. Wenn wir Glück haben,werden siemöglicherweise sogar zum Standard!
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!
-
Es klingtnach viel Code,aberich sehenicht,wo Untereinträge automatisch sortiert werden.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
Dachte,dies könnte als weitere Optionnützlich sein. Hieristeine einfache Verwendungim globalen Untermenü $. Ich verwende den Hook admin_init,dain admin_menumöglicherweisenoch andere Plugins Untermenüelemente hinzufügen (inmeinem Fall war dies zufrüh,um sortiert zu werden). Beachten Sie auch,dassfür die anonyme (Lambda) Funktionim Usort PHP 5.3+erforderlichist.
<?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] ); } ); } }
Beachten Sie,dass
$submenu_key
$parent_slug
in add_submenu_page ,dasentspricht$menu_slug
in add_menu_page .Thought 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.-
Schön und kompakt.Wasbedeutet "$ submenu_key"?Nennt WordPress den "$parent slug"in den [add_submenu_page] (https://developer.wordpress.org/reference/functions/add_submenu_page/) Dokumenten?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 Gute Frage!Sie haben Recht,esist "$parent_slug"in den Dokumenten "add_submenu_page",wasmit "$menu_slug"in "add_menu_page"identischist.@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
Ineinem verwandten Hinweis zu " Ändern der Reihenfolge der Admin-Menüabschnitte? ",Ich suchenacheiner Möglichkeit,die Einträgein jedem Unterabschnitt des Administrationsbereichs von WordPress alphabetisch zu sortieren.
Wennein neues Plugin hinzugefügt wird,wird sein Eintrag derzeit aneiner scheinbar zufälligen Stelle unter Einstellungen/Tools/Plugins angezeigt,undesist oft schwierig,denneuen Menüpunkt zufinden. (Ich habebereits viele Plugins,daher sindmeine Menüs ziemlich voll.)
Daich Plugins ziemlich regelmäßig hinzufüge undentferne,mussich liebernicht ständig auf die Einstellungsseitefürein Pluginfür die Menüreihenfolgegehen und die Reihenfolge anpassen.
Entschuldigungfür die lange Frage; Ichmöchtenur klarstellen,wonachich suche.
Beispiel
Anstelle von:
Kannich das Menü alphabetisch sortieren lassen (odernacheiner anderen logischen Methode),z. B.:
Nochbesser wäreeine Sortiermethode,bei der die Kerneinträge standardmäßig dortbleiben,wo sie sichbefinden,undnur Elemente sortiert werden,die von Plugins hinzugefügt wurden: