web-dev-qa-db-ja.com

管理ページを追加するが、管理メニューには表示しない

私はそれが独自のメニューを持っているカスタムプラグイン 'Charts'を持っています。そのメニューにはプラグインのための3ページへのリンクがあります - 'Charts'、 'Add Chart'および 'Edit Chart'。しかし、 'Edit Chart'へのリンクを表示したくありません。

問題のページを追加する方法は次のとおりです -

$this->pagehook = add_submenu_page('charts', __('Edit Chart'), __('Edit Chart'), 'edit_charts', 'edit-chart', array(&$this, 'on_show_page'));

私はインターネットを精査しましたが、これを実行する方法を見つけることができません(それはうまくいきます)。トップレベルのメニュー全体を削除することも可能です(私が必要としているものではありません)。個々のエントリを$submenuグローバルから削除することができます(ただし、登録された機能も削除されます)。

global $submenu;
if(!empty($submenu['charts'])) : foreach($submenu['charts'] as $key => $page) :
        if($page[0] === 'Edit Chart') :

            /** Removes all permissions to access the page */
            //unset($submenu['charts'][$key]);              
            /** Removes the title, but the menu entry still exists, so it looks odd */
            $submenu['charts'][$key][0] = '';

        endif;
    endforeach;
endif;

私はCSSでそれを隠すことを検討しましたが、Wordpressが生成するHTMLを通してそれをする方法を見ることができません -

<li><a href="admin.php?page=edit-chart" tabindex="1">Edit Chart</a></li>

私はjQueryについても検討しましたが、それはCSSルートと同様の制限があります。それに私はこれを望んだ唯一の人であると信じることを拒否します。

ヒントや評価があれば。

ありがとう。

7
David Gard

サブメニューページを親スラッグとして使用します。管理メニューには2つのレベルしかないため、架空の3番目のレベルは非表示になります。

テスト済みのサンプルコード

add_action( 'admin_menu', 'wpse_73622_register_hidden_page' );

function wpse_73622_register_hidden_page()
{
    add_submenu_page(
        'options-writing.php',
        'Hidden!',
        'Hidden!',
        'exists',
        'wpse_73622',
        'wpse_73622_render_hidden_page'
    );
    # /wp-admin/admin.php?page=wpse_73622
}

function wpse_73622_render_hidden_page()
{
    echo '<p>hello world</p>';
}
8
fuxia

add_submenu_page() のドキュメントから、あなたはそれが属するトップレベルのメニュー項目からあなたのサブメニューリンクを隠すことができることがわかりますslug(第一引数)をnullに設定すること:

add_action( 'admin_menu', 'register_my_custom_submenu_page' );

function register_my_custom_submenu_page() {
    add_submenu_page( 
        null,
        'My Custom Submenu Page',
        'My Custom Submenu Page',
        'manage_options',
        'my-custom-submenu-page',
        'my_custom_submenu_page_callback',
    );
}

目的のメニュー項目(たとえば、非表示の[チャートの編集]ページにアクセスしたときに[すべてのチャート])を強調表示するには、次の操作を行います。

add_filter( 'submenu_file', function($submenu_file){
    $screen = get_current_screen();
    if($screen->id === 'id-of-page-to-hide'){
        $submenu_file = 'id-of-page-to-higlight';
    }
    return $submenu_file;
});
22
lanicor