WordPressの管理メニューがどのように構築されるかを簡単に説明します-私は話していません add_menu_page
。APIの、実際のデフォルトのWordPressメニューです。
メニューファイルの呼び出し
メニューは、明らかにによって読み込まれwp-admin/admin.php
ます。しかし、WordPressのドキュメントに基づいて使用するのに慣れている標準APIからはロードされません。むしろ、メニュー全体(すべての可能なオプション、サブメニューなど)は、で定義されている単純な配列を介してロードされwp-admin/menu.php
ます。
だから、メニューシステムをロードするために、admin.php
ちょうどrequire
よmenu.php
...ワードプレス3.0で99行を中心に。
メニューの読み込み
メニュー自体はグローバル配列に格納されます$menu
。インラインドキュメントによると、メニュー配列には次の要素があります。
The elements in the array are:
* 0: Menu item name
* 1: Minimum level or capability required.
* 2: The URL of the item's file
* 3: Class
* 4: ID
* 5: Icon for top level menu
たとえば、ダッシュボードは次のとおりです。
$menu[2] = array( __('Dashboard'), 'read', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'div' );
ファイルは通過して各メニュー項目を配列にロードし、すべてのサブメニュー項目を$submenu
親メニューのURLに基づいてインデックス付けされた配列にロードします。したがって、「ダッシュボード」と呼ばれるダッシュボードのサブメニュー項目は次のとおりです。
$submenu[ 'index.php' ][0] = array( __('Dashboard'), 'read', 'index.php' );
システムがすべてのメニューのロードを完了した後(それほど多くはありませんが、システムはインデックスを5または10ずつステップスルーします...最初のメニュー項目であってもダッシュボードはまだアイテム "2"(PHP配列はインデックス0から始まるので、これは操作の余地を与えます)。
この時点で、システムはを呼び出しますwp-admin/includes/menu.php
。
メニューをステップスルーする
この3番目のファイルは各メニュー項目を順に調べ、現在のユーザーに割り当てられた特権に基づいて、メニューを使用するか削除します。まず、すべてのサブメニューをループし、ユーザーがアクセスできないページを削除します。次に、親ページをループし、同じことを行います。次に、メニューを削除して残っている重複セパレーターを削除します。
最後に、割り当てられたメニュー順序に基づいてメニューをソートします。
カスタムメニューの注文
フックadmin_menu
は、メニューが設定された後、何かが注文される前に呼び出されます。そのため、APIを「ハッキング」せずにWordPressメニューシステム全体を注文することができます。
アクションadmin_menu
が実行されると、カスタムページがシステムにロードされます。次に起こることは、WordPressがというフィルターをチェックすることcustom_menu_order
です...このフィルターは常に返されますfalse
れ、カスタムオーダーを使用するかどうかをWordPressに伝えます。
テーマに次を追加して、true
代わりにフラグを設定し、明示的なメニュー順序を定義します。
function custom_menu_order($menu_ord) {
if (!$menu_ord) return true;
return array('index.php', 'edit.php', 'edit-comments.php');
}
add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');
すべてのメニューに必要な順序を指定します(ファイルのリストを取得できるように、メニュー読み込みファイルへの参照を指定しました)。これで処理されます。
編集(2010年9月2日):
このメソッドを使用してカスタム投稿タイプの編集画面の順序を指定するには、編集画面のURLを知る必要があります。ほとんどの場合、それはになりますhttp://blog.url/wp-admin/edit.php?post_type=POST_TYPE
。これは、サイトでWordPressがどのように設定されているか(ルートまたはサブフォルダーにインストールされている場合)および使用しているカスタム投稿タイプのスラッグに依存します。
例えば...
「Stack Exchange Questions」のカスタム投稿タイプがあり、ダッシュボードアイコンのすぐ下のダッシュボードと同じセクションにエディターを表示するとします。テーマのfunctions.php
ファイルで次のコードを使用します。
function custom_menu_order($menu_ord) {
if (!$menu_ord) return true;
return array('index.php', 'edit.php?post_type=stack_exchange_questions');
}
add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');
メニューの残りの部分は影響を受けませんが、カスタム編集ページはダッシュボードと同じセクションに移動し、そのすぐ下に表示されます。これを使用して、カスタム投稿タイプを管理メニューの任意のセクションに移動し、任意の順序で配置できます。同じ方法で標準のメニュー項目を移動することもできます。
与えられたsectionのすべてのメニュー項目の順序を指定することを確認してください。そうしないと、メニューが予期せぬ奇妙さを被る可能性があります。