問題描述

如何在我的外掛中擴充套件 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()類的其餘部分是可插拔的。這只是取決於你正在努力做什麼以及你想做什麼。

也可以看看:

次佳解決方案

小例子,我在編輯 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。