質問: 管理メニューセクションの順序を変更する 運がなくてもこの非常に単純なタスクを達成するために数時間を費やした後、私はここで少しイライラしています。基本的に私が作成した5つのカスタム投稿タイプがあり、私がしたいのは "ダッシュボード" の直下に特定の順序でそれらのそれぞれを表示することです。wordpressのドキュメントによると、最高のメニュー順は "5"のように見えるので、これは実際にはできないようです。そしてlより上これを読んでいる専門家の中には、これを読んで、機能ファイルを利用し、プラグインを利用しなくても管理メニューを希望どおりに注文できるという簡単な方法を説明できると思います。先に進んで、5つの別々の投稿タイプを作成し、それらをダッシュボードの直下に特定の順序で含めるようにしてください。これは不可能なようです。私と共有することができますか、できればjqueryを利用せずに?
回答: これがwordpress管理者メニューがどのように構築されるかの簡単なチュートリアルです - 私はadd_menu_page apiを話していない、私は実際のデフォルトのwordpressメニューを意味します。メニューファイルを呼び出すメニューは、明らかにwp-admin/admin.phpによってロードされます。しかし、これはwordpressのドキュメントに基づいて使用するのに慣れている標準的なapiを通してはロードされません。そうではなく、メニュー全体(すべての可能なオプション、サブメニューなど)がwp-admin/menu.phpで定義されている単純な配列を介してロードされます。そのため、メニューシステムをロードするには、wordpress 3.0の99行目のadmin.phpだけでrequires menu.php ...とします。メニューを読み込むメニュー自体はグローバル配列$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に基づいて索引付けされます。そのため、dashboardの "dashboard"というサブメニュー項目は次のとおりです。 $submenu[ 'index.php' ][0] = array( __('dashboard'), 'read', 'index.php' ); システムがすべてのメニューをロードし終わった後(それほど多くはありませんが、システムは5または10ずつインデックスをたどっていきます...最初のメニュー項目であるにもかかわらず、ダッシュボードはまだ次のようにインデックスされています) item "2"(phpの配列はインデックス0から始まります。そのため、いくらかの操作スペースがあります)。この時点で、システムはwp-admin/includes/menu.phpを呼び出します。メニューを進むこの3番目のファイルは各メニュー項目を調べ、現在のユーザーに割り当てられている権限に基づいて、メニューを使用するか削除します。最初にすべてのサブメニューをループし、ユーザーがアクセスできないページを削除します。それから、親ページをループして同じことをします。それからそれはメニューを除去したことから残っているどんな重複セパレーターも削除します。最後に、割り当てられたメニュー順に基づいてメニューを並べ替えます。カスタムメニューの注文フックadmin_menuは、メニューが設定された後に呼び出されますが、 before anythingが順序付けられています。そのため、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'); その他のメニューは影響を受けませんが、カスタム編集ページはダッシュボードと同じセクションに移動され、そのすぐ下に表示されます。これを使用して、カスタム投稿タイプを管理者メニューの任意のセクションに移動し、それらを任意の順序で配置できます。標準のメニュー項目を同じ方法で移動することもできます。 与えられたセクションのすべてのメニュー項目の順序を指定することを確認してください 、そうしないとあなたのメニューは何らかの予期せぬ奇妙さにさらされるかもしれません。