新しいWordPress 3.1管理バーはプラグイン可能ですか?どのように拡張できますか?


8

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

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

すでに行われていることの良い例は、Yoast WordPress SEO(Wordpress Plugin)です。

代替テキスト

現在、管理バーの拡張に関する利用可能なドキュメントはありません。コーデックスによるとそれをオフにするか表示しないための2つのフィルターがあります:

no_admin_bar()show_admin_bar()


3
Yoastプラグインがどのように機能するかを理解することはできませんか?それとも、コードを理解するために少し抽象化する必要がありますか?
t31os

1
t31osに同意する。質問する前に質問を調査するのに役立ちます... ;-)
Denis de Bernardy

5
本当に?これは良い質問だと思います。ここでのほとんどすべての質問は、「いくつかの調査を行う」ことで回答できます。もちろん、Yoastのコードを調べて、彼がそれをどのように実行したかを調べることもできますが、現在のところ、管理バーの拡張に関するドキュメントはありません。Yoast WordPress SEOプラグインは単なる例であり、リンクを追加するだけでなく、他にもできることが確実です。
Chris_O

3.1はベータ版であり、変更される可能性のある機能のドキュメントが存在する可能性は低くなります。誤解しないでください。3.1を見込んで自分でいくつかの例を見てみたいと思います... 。(または3.0.2でこれはありますか)
t31os

回答:


16

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_barWP_Admin_Bar()WordPress内のクラスのインスタンスです。いくつかの異なるメソッドとプロパティがありますが、ここで最も興味のあるものは、明らかにadd_menu()です。このメソッドは特定のパラメーターを受け入れます。

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

しかし、WP_Admin_Bar()クラスの残りの部分プラグ可能です。それはまさにあなたが何をしようとしているのか、そしてあなたがそれをどのようにしたいのかに依存します。

関連項目:


とても良い答えです。PHPXrefを見終わったところです。
Chris_O

11

小さな例、私はこれを視聴日の前に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 );

7

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

  • 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');

これは基本的なことです-これは私が自分で簡単に調べたすべてです(正直に言うと、フックadmin_bar_menuがインスタンスを返さないのは少し面倒ですWP_Admin_Bar-これらのグローバルはすべて嫌いです!)


2
その迷惑は十分な理由になるのTracのチケットを開く ...私たちはWP 3.1.1のためにそれをパッチことができるように
EAMann

2
フォローアップするには:TheDeadMedicがチケットオープンし、 3.1の時間に含まれていたため、グローバル変数を読み取る必要がなく、最初のパラメーターとして参照によって渡されます。
Jan Fabry
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.