管理メニュー項目を並べ替える
3 回答
- 投票
-
- 2013-01-08
グローバルな
$submenu
を並べ替えることができます.適用された並べ替えにより、サブ配列
$submenu['options-general.php']
のキー番号がリセットされます.これは次のとおりです.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
そして次のようになります:
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
ここでは、デフォルトのアイテムの長さが6に等しいと考えています. WordPress 3.5より前は、7つのアイテムがありましたが、プライバシーはなくなり、読み取りタブに埋め込まれました.
ローカルでテストすると、予期しない結果は発生せず、問題なく動作します.プラグインが
$submenu['options-general.php'][15]
に依存して自分自身または他の何かを配置した場合、バグが発生する可能性があります.並べ替えは、デフォルトのアイテムと残りのアイテムに別々に適用されます.最初のブロックの
usort
を無効にするだけで、目的の出力が得られます.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
私は同じものを探していて、マイクから提供されたコードをコピーすると考えました.マイクがそれを使用しているのは彼だけなので、彼はまだアルファ版であると主張しています.
テストしましたが、うまく機能しているようです.まだ処理されていないユースケースがあると確信しています.
たぶん、マイクはここにコメントし、彼のクラスを使用して目標を達成する方法について追加のヘルプを提供します.
ファイルをダウンロードして、テーマのディレクトリにドロップできます: https://gist.github.com/792b7aa5b695d1092520
以下は、テーマのfunctions.phpファイルで関数を呼び出す方法を示しています.
<?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 }
さらに、これらの関数はWordPress 3.1に含めるために(ベースとして)検討されているので、運が良ければこれらは標準になるかもしれません!
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!
-
すばらしいコードのように聞こえますが、サブエントリが自動的にソートされる場所がわかりません.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
これは別のオプションとして役立つ可能性があると考えました.これは、グローバル$サブメニューの簡単なusortです. admin_menuには、サブメニュー項目を追加する他のプラグインがまだある可能性があるため、admin_initフックを使用します(私の場合はそうだったので、並べ替えを行うには時期尚早でした).また、usortの無名(ラムダ)関数にはPHP5.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] ); } ); } }
$submenu_keyは $parent_slug
であることに注意してくださいnofollownoreferrer "> add_submenu_page .これは、 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.-
素敵でコンパクト.`$ submenu_key`は何を表していますか?それは、WordPressが[add_submenu_page](https://developer.wordpress.org/reference/functions/add_submenu_page/)ドキュメントで「$parentslug」と呼んでいるものですか?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すばらしい質問です!正解です.add_submenu_pageドキュメントの `$parent_slug`であり、add_menu_pageの` $menu_slug`と同じです.@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
「管理メニューセクションの順序の変更」に関連するメモ? "、WordPressの管理領域の各サブセクションのエントリをアルファベット順に並べ替える方法を探しています.
現在、新しいプラグインが追加されるたびに、そのエントリは[設定]/[ツール]/[プラグイン]の下のランダムな場所に表示され、新しいメニュー項目を見つけるのが難しいことがよくあります. (私はすでにたくさんのプラグインを持っているので、私のメニューはかなりいっぱいです.)
プラグインをかなり定期的に追加および削除しているので、メニュー順序付けプラグインの設定ページに継続的に移動して順序を調整する必要はありません.
長い質問でごめんなさい.探しているものを明確にしたいだけです.
例
代わりに:
メニューをアルファベット順に(または別の論理的な方法で)並べ替えることはできますか?例:
さらに良いのは、コアエントリをデフォルトの場所に保持し、プラグインによって追加されたアイテムのみを並べ替える並べ替え方法です.