web-dev-qa-db-ja.com

新しいWordPress 3.1のアドミンバーはプラグイン可能ですか、そしてそれをどのように拡張できますか?

WordPress 3.1のアドミンバーの機能をプラグインで拡張するにはどうすればいいですか?

管理バーにリンクやその他の機能を追加する際に使用する特定のフックとフィルタを探しています。

これまでに行われた好例は、Yoast WordPress SEO(Wordpress Plugin) です。

alt text

現在、管理バーを拡張するための資料はありません。 によると、The Codex それをオフにするか、または表示しないための2つのフィルタがあります。

no_admin_bar()show_admin_bar()

8
Chris_O

Yoastのプラグインは、メニューを追加するだけでいいのです。基本的に、管理バーはサイドバーにあるのと同じプラグイン管理ページへのリンクの代替セットです。トップレベルのSEOメニューを追加するために、Yoastは次のことを行います。

$wp_admin_bar->add_menu( array( 'id' => 'wpseo-menu', 'title' => __( 'SEO' ), 'href' => get_admin_url('admin.php?page=wpseo_dashboard'), ) );

これにより、 "wpseo-menu"という名前のメニューが管理バーに追加され、ユーザーがリンクをクリックするとプラグインのダッシュボードに移動します。子リンクも同様に追加されます。

$wp_admin_bar->add_menu( array( 'parent' => 'wpseo-menu', 'id' => 'wpseo-kwresearch', 'title' => __( 'Keyword Research' ), '#', ) );

追加するメニューの「親」を指定するだけです。

それから、必要なだけ深く入り、必要なときに$wp_admin_bar->add_menu()を呼び出して適切な情報を指定します。


参考までに、変数$wp_admin_barはWordPress内のクラスWP_Admin_Bar()のインスタンスです。それはいくつかの異なるメソッドとプロパティを持っていますが、ここであなたが最も興味を持っているのは明らかにadd_menu()です。このメソッドは特定のパラメータを受け入れます。

  • title - デフォルトはfalse
  • href - デフォルトはfalse、
  • parent - デフォルトfalse - そのメニューのサブメニューのID値を渡す
  • id - デフォルトのサニタイズされたタイトル値になります。
  • meta - デフォルトのfalse - 以下のオプションのいずれかの配列:array( 'html' => '', 'class' => '', 'onclick' => '', target => '' );

しかし、WP_Admin_Bar()クラス の残りの部分は プラガブルです。それはちょうどあなたがやろうとしていることとあなたがそれをしたい方法に正確に依存します。

関連項目:

16
EAMann

小さな例ですが、私はこれを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 );
11
bueltge

ナイトリービルドをダウンロードして、これら2つのファイルをチェックしてください。

  • wp-includes/admin-bar.php
  • wP - インクルード/クラス - WP - 管理者 - 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');

それはほとんど基本です - これは私が自分自身から集めたものです(正直なところ、admin_bar_menuWP_Admin_Barのインスタンスを返さないのは少し面倒です - 私はこれらすべてのグローバルを嫌いです)。

7
TheDeadMedic