web-dev-qa-db-ja.com

Add_submenu_page()を使った管理メニューの現在のクラス

私はWordPress内でプラグインの管理メニューを作成しようとしています。 add_menu_page()を使用してメニューを正常に登録しましたが、サイドバーに表示されるはずです。 add_submenu_page()を使用してメニュー内にいくつかのセクションも追加しました。

WordPress(3.05を実行している)は、どのメニュー項目を "current"としてアクティブにすべきかを正しく示していないようです。

メインのダッシュボードメニューにテストページを追加すると、これがわかります。

http://dl.dropbox.com/u/3019972/wp-screen1.png

ご覧のとおり、現在のページはメニュー内で視覚的に正しく、「現在」のクラスが与えられています。しかし私自身のメニューでは、このようになります。

http://dl.dropbox.com/u/3019972/wp-screen2.png

この例では、「ダッシュボード」が強調表示されていると思います。

これは単なるWordPressのバグですか?それとも私自身のメニュー内でこれを機能させるために特別なコードを提供する必要がありますか?

コード例で更新

私がメニューの追加や作成に使っているコードは、こんな感じです。

add_action('admin_menu','my_admin_menu');

function my_admin_menu() {

// this test works as expected
// add_submenu_page( 'index.php', 'test', 'test', 'read', 'admin.php?page=plugin-dashboard','my_pluggin_dashboard' );

// my main menu menu    
add_menu_page(__('My Plugin', 'myplugin'),__('My Plugin', 'myplugin'), 'edit_posts','admin.php?page=plugin-dashboard','my_plugin_dashboard','icon');

// dashboard submenu - this fails to highlight with current
add_submenu_page('admin.php?page=plugin-dashboard', __('Dashboard','myplugin'), __('Dashboard','myplugin'), 'edit_posts', 'admin.php?page=plugin-dashboard', 'my_plugin_dashboard' );

// settings submenu - this fails to highlight with current
add_submenu_page('admin.php?page=plugin-dashboard', __('Settings','myplugin'), __('Settings','myplugin'), 'manage_options', 'admin.php?page=my-plugin-settings', 'my_plugin_settings' );

}

機能するコードと期待したとおりに動作しないコードについてコメントしました。コメントしてくれてありがとう。

1
Scott

これを試して:

add_menu_page(__('My Plugin', 'myplugin'),__('My Plugin', 'myplugin'), 'edit_posts','my-plugin-dashboard','my_plugin_dashboard','icon');

// dashboard submenu - this fails to highlight with current
add_submenu_page('my-plugin-dashboard', __('Dashboard','myplugin'), __('Dashboard','myplugin'), 'edit_posts', 'my-plugin-dashboard', 'my_plugin_dashboard' );

// settings submenu - this fails to highlight with current
add_submenu_page('my-plugin-dashboard', __('Settings','myplugin'), __('Settings','myplugin'), 'manage_options', 'my-plugin-settings', 'my_plugin_settings' );

基本的に、admin.phpのフルページリンクを使用しないでください...ページスラッグとして。特にコールバックを渡す場合は、ページアドレスではなくスラッグを使用するだけです。

2
wyrfel