web-dev-qa-db-ja.com

サブレベルメニューを作成せずにトップレベル管理メニューのみを追加する方法

これがコードスニペットです。

    add_action( 'admin_menu', 'travel_site' );

function travel_site(){
    add_menu_page( 'Travel Site Menu', 'Travel Site', 'manage_options', 'travel-site-menu', 'ts_admin_main_page' );
    add_submenu_page("travel-site-menu","View Travel Requests","View Travel Requests","manage_options","ts-view-travel-requests","ts_admin_vtr_page");
}

function ts_admin_main_page(){
    echo '<div class="wrap">';
    echo    '<p>Testing main travel site menu page</p>';
    echo '</div>';
}

function ts_admin_vtr_page(){
    echo '<div class="wrap">';
    echo    '<p>Testing view travel requests</p>';
    echo '</div>';
}

サブメニューを追加するときの問題は、トップレベルメニューの名前( "Travel Site")がそれ自身をサブレベルメニューとして作成することです。画像を参照してください。 enter image description here

基本的にメインメニューの "Travel Site"の下に "Travel Site"サブメニューがありません。

2
dave

サブメニュー項目のタイトルを変更しながら、最上位レベルと同じメニュースラッグを持つ下位レベルの項目を追加することで効果的にこれを行うことができます。これにより、トップレベルの宛先と最初のサブメニュー項目が同じであっても、重複したメニュー項目が表示されるのを防ぎます。

あなたは少なくとも2つのサブメニュー項目を持っている必要があります、そして1つはあなたのトップレベルのメニュー項目として重複した目的地になるでしょう。

例えば:

add_action( 'admin_menu', 'add_travel_menu' );
function add_travel_menu() {
        add_menu_page('Travel Site Menu', 'Travel Site', 'manage_options', 'travel-site-menu', 'ts_admin_main_page');
        add_submenu_page('travel-site-menu', 'Travel Site', 'View Travel Site', 'manage_options', 'travel-site-menu', 'ts_admin_main_page');
        add_submenu_page('travel-site-menu', 'View Travel Requests', 'View Travel Requests', 'manage_options', 'ts-view-travel-requests', 'ts_admin_main_page');
}
function ts_admin_main_page() {
    if ( !current_user_can( 'manage_options' ) )  {
        wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
    }
    echo '<div class="wrap">';
    echo '<p>Here is where the form would go if I actually had options.</p>';
    echo '</div>';
}

これにより、以下のメニューが作成されます。

  • 旅行サイト - >旅行サイトメニュー
    • 旅行サイトを見る - >旅行サイトメニュー
    • 旅行リクエストを表示 - > ts-view-travel-requests

enter image description here

関数ts_admin_main_pageは実際には "Travel Site"と "View Travel Site"の行き先となるページを作成します。 「旅行依頼の表示」のサブページの宛先を作成する、同様の関数「ts_admin_vtr_page」を作成する必要があります。

1
dbmpls

これを実行するための本当に良い方法はありません。 _wp_menu_output 関数をチェックしてください。それがすべての作業がメニュー出力のために行われるところです。その$submenu_as_parentパラメータと 使い方 を参照してください。これをfalseに設定すると望みの結果が得られますが、実際にそれを機能させるためのフィルタはありません。この件に関しては オープンチケット がありますが、実際には何年もの間何の行動もとられていません。コアファイルを編集するのではなく(悪い考え)、何らかの出力バッファリングと非常に脆弱な解決策がなければ、これを解決することはできません。

3
chrisguitarguy