特定の管理バー項目を削除する方法についてのテクニックを見たことがありますが、プラグイン/テーマによって追加された追加メニューをどのように使用すればよいでしょうか。
all Admin Barの項目を削除するには?
関連Q&A
管理バーからすべてのノードを取得し、それらを繰り返し処理し、parent
を持たないすべてのノードを削除することでこれを解決しています。
特別なチェックが必要な[ユーザーアクション]メニュー( "Howdy、user_name")は例外です。
add_action( 'admin_bar_menu', 'wpse_76491_admin_bar_menu', 200 );
function wpse_76491_admin_bar_menu()
{
global $wp_admin_bar;
if ( !is_object( $wp_admin_bar ) )
return;
// Clean the AdminBar
$nodes = $wp_admin_bar->get_nodes();
foreach( $nodes as $node )
{
// 'top-secondary' is used for the User Actions right side menu
if( !$node->parent || 'top-secondary' == $node->parent )
{
$wp_admin_bar->remove_menu( $node->id );
}
}
// end Clean
}
これにより、次の管理バーが生成されます。
唯一の残りは Debug Bar pluginで、これは優先順位1000
で追加されています。
add_action('admin_bar_menu', array(&$this, 'admin_bar_menu'), 1000);
問題は、200
より高い優先順位でフックすると、top-secondary
ノードにアイテムを追加できないことです。そしてそれは私にとって謎です...
しかし、それは開発者向けの項目であり、問題にはなりません。そして、プラグインによって追加された4つの余分なアイテムはすべて削除されました。
完全を期すために、管理バーをクリーンアップした後に追加する内容の例を示します。以下は// end Clean
の後に続きます。
// Conditional button, 'Go to Site' or 'Go to Admin' rendered
$title_goto = is_admin() ? 'Go to site' : 'Go to admin';
$url_goto = is_admin() ? site_url() : admin_url();
$wp_admin_bar->add_menu( array(
'id' => 'go_to_site_or_admin',
'title' => $title_goto,
'href' => $url_goto
) );
// end Conditional button
// Conditional Logout or Profile button
$title_logout = is_admin() ? 'Logout' : 'Profile';
$url_logout = is_admin() ? wp_logout_url() : get_edit_profile_url( get_current_user_id() );
$wp_admin_bar->add_menu( array(
'id' => 'wp-custom-logout',
'title' => $title_logout,
'parent'=> 'top-secondary',
'href' => $url_logout
) );
// end Conditional Logout/Profile button
// Codex search form item
$codex_search = '<form target="_blank" method="get" action="http://wordpress.org/search/do-search.php">
<input type="text" onblur="this.value=(this.value==\'\') ? \'Search the Codex\' : this.value;" onfocus="this.value=(this.value==\'Search the Codex\') ? \'\' : this.value;" maxlength="100" value="Search the Codex" name="search" class="adminbar-input">
</form>';
$wp_admin_bar->add_menu( array(
'parent' => 'top-secondary',
'title' => $codex_search,
'href' => FALSE
) );
管理者またはサイトを表示している場合、これは別の管理バーを作成します。