問題描述
如何在我的插件中擴展 WordPress 3.1 管理欄的功能?
我正在尋找特定的鈎子和過濾器,用於在管理欄中添加鏈接或其他功能。
已經完成的一個很好的例子是 Yoast WordPress SEO (WordPress Plugin)。
目前,在擴展管理欄上沒有可用的文檔。根據 The Codex 有兩個過濾器關閉或不顯示它:
no_admin_bar()& show_admin_bar()
最佳解決方案
Yoast 的 plug-in 其實是一個非常好的例子,如果你想做的是添加菜單。基本上,管理欄只是連接到側邊欄中相同的 plug-in 管理頁面的另一組鏈接。要添加 top-level SEO 菜單,Yoast 執行以下操作:
$wp_admin_bar->add_menu( array( 'id' => 'wpseo-menu', 'title' => __( 'SEO' ), 'href' => get_admin_url('admin.php?page=wpseo_dashboard'), ) );
它將一個名為”wpseo-menu” 的菜單添加到管理欄,並在用户點擊鏈接時將用户引導到 plug-in 的儀錶板。兒童鏈接以類似的方式添加:
$wp_admin_bar->add_menu( array( 'parent' => 'wpseo-menu', 'id' => 'wpseo-kwresearch', 'title' => __( 'Keyword Research' ), '#', ) );
您只需指定要添加的菜單的”parent” 。
然後,您可以根據需要去深入,當您需要並指定適當的信息時,請致電 $wp_admin_bar->add_menu()。
為了參考,變量 $wp_admin_bar 是 WordPress 中 WP_Admin_Bar()類的一個實例。它有幾種不同的方法和屬性,但您最感興趣的是顯然是 add_menu()。此方法接受某些參數:
-
title – 默認為 false
-
href – 默認為 false,
-
parent – default false – 傳遞該菜單的子菜單的 ID 值
-
id – 默認為消除標題值。
-
任何以下選項的元 – 默認假數組:
array( 'html' => '', 'class' => '', 'onclick' => '', target => '' );
但 WP_Admin_Bar()類的其餘部分是可插拔的。這只是取決於你正在努力做什麼以及你想做什麼。
也可以看看:
-
SVN of Yoast’s plug-in:通過文件中途閲讀
wpseo_admin_bar()中的菜單定義 -
WP_Admin_Bar()類的 PHPXref
次佳解決方案
小例子,我在編輯 wp-hackers 列表之前也寫過這個列表
function wp_codex_search_form() {
global $wp_admin_bar, $wpdb;
if ( !is_super_admin() || !is_admin_bar_showing() )
return;
$codex_search = '<form target="_blank" method="get" action="http://wordpress.org/search/do-search.php" style="margin:2px 0 0;">
<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">
<button type="submit" class="adminbar-button">
<span>Go</span>
</button>
</form>';
/* Add the main siteadmin menu item */
$wp_admin_bar->add_menu( array( 'id' => 'codex_search', 'title' => 'Search Codex', 'href' => FALSE ) );
$wp_admin_bar->add_menu( array( 'parent' => 'codex_search', 'title' => $codex_search, 'href' => FALSE ) );
}
add_action( 'admin_bar_menu', 'wp_codex_search_form', 1000 );
第三種解決方案
下載每夜構建,並查看這兩個文件;
-
wp-includes /admin-bar.php
-
wp-includes /class-wp-admin-bar.php
WP_Admin_Bar 類基本上是’API’,而文件 admin-bar.php 使用它來構建默認的條並且消除一個鈎子的負載。
function my_admin_bar()
{
global $wp_admin_bar;
$wp_admin_bar->add_menu(array(
'parent' => 'my-account', // optional
'id' => 'my-unique-id',
'title' => '',
'href' => ''
));
}
add_action('admin_bar_menu', 'my_admin_bar');
這幾乎是基礎知識 – 這是我從一個快速的 gander 自己收集的 (老實説,這有點煩人的鈎子 admin_bar_menu 不傳回 WP_Admin_Bar 的實例 – 我討厭所有這些全局變量!)
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。
