問題描述
如何在我的外掛中擴充套件 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。
