Ist die neue WordPress 3.1 Admin Bar steckbar und wie kann ich sie erweitern?

8

Wie kann ich die Funktionen der WordPress 3.1 Admin-Leiste in meinen Plugins erweitern?

Ich suche nach bestimmten Hooks und Filtern, die zum Hinzufügen von Links oder anderen Funktionen zur Admin-Leiste verwendet werden können.

Ein gutes Beispiel dafür, was bereits getan wurde, ist das Yoast WordPress SEO (Wordpress Plugin) .

Alt-Text

Derzeit ist keine Dokumentation zur Erweiterung der Admin-Leiste verfügbar. Laut The Codex gibt es zwei Filter, um es auszuschalten oder nicht anzuzeigen:

no_admin_bar() & show_admin_bar()

Chris_O
quelle
3
Können Sie nicht einfach einen Blick darauf werfen, wie das Yoast-Plugin das macht, oder ist der Code ein wenig zu abstrakt, um einen Sinn zu ergeben?
t31os
1
Zustimmung zu t31os. Es hilft, Ihre Frage zu recherchieren, bevor Sie fragen ... ;-)
Denis de Bernardy
5
"Ja wirklich?" Ich denke das ist eine gute Frage. So ziemlich jede Frage hier kann mit "Recherchen" beantwortet werden. Natürlich könnte ich Yoasts Code durchforsten und herausfinden, wie er es gemacht hat, aber da es derzeit keine Dokumentation zur Erweiterung der Admin-Leiste gibt. Das Yoast WordPress SEO Plugin war nur ein Beispiel, da ich sicher bin, dass mehr getan werden kann als nur Links hinzuzufügen.
Chris_O
3.1 befindet sich in der Beta-Phase. Es ist weniger wahrscheinlich, dass Dokumentation für Funktionen vorhanden ist, die Änderungen unterliegen. Versteh mich nicht falsch, ich wäre neugierig, einige Beispiele selbst in Erwartung von 3.1 zu sehen ... (Ich neige dazu, den stabilen Zweig zu verwenden, da ich mehr Zeit damit verbringe, die meisten Benutzer zu unterstützen) ... (oder ist das in 3.0.2?)
t31os

Antworten:

16

Das Plug-In von Yoast ist eigentlich ein sehr gutes Beispiel, wenn Sie nur Menüs hinzufügen möchten. Grundsätzlich ist die Admin-Leiste nur ein alternativer Satz von Links zu denselben Plug-In-Admin-Seiten, die Sie in der Seitenleiste haben. Um das SEO-Menü der obersten Ebene hinzuzufügen, führt Yoast Folgendes aus:

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

Dies fügt der Admin-Leiste ein Menü mit dem Namen "wpseo-menu" hinzu und leitet Benutzer zum Dashboard des Plug-Ins, wenn sie auf den Link klicken. Untergeordnete Links werden auf ähnliche Weise hinzugefügt:

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

Sie geben einfach das "übergeordnete Element" des Menüs an, das Sie hinzufügen.

Dann können Sie so tief gehen, wie Sie möchten, anrufen, $wp_admin_bar->add_menu()wenn Sie möchten, und die entsprechenden Informationen angeben.


Als Referenz ist die Variable $wp_admin_bareine Instanz der Klasse WP_Admin_Bar()in WordPress. Es hat verschiedene Methoden und Eigenschaften, aber die, an der Sie hier am meisten interessiert sind, ist natürlich add_menu(). Diese Methode akzeptiert bestimmte Parameter:

  • Titel - Standardwert falsch
  • href - Standardwert false,
  • parent - default false - Übergibt den ID-Wert für ein Untermenü dieses Menüs
  • id - Standardmäßig wird ein bereinigter Titelwert verwendet.
  • meta - default false - Array einer der folgenden Optionen:array( 'html' => '', 'class' => '', 'onclick' => '', target => '' );

Aber der Rest der WP_Admin_Bar()Klasse ist steckbar. Es kommt nur darauf an, was genau Sie versuchen und wie Sie es tun möchten.

Siehe auch:

EAMann
quelle
Sehr gute Antwort. Ich habe gerade die PHPXref durchgesehen.
Chris_O
11

kleines beispiel, ich hatte dies auch auf wp-hackers liste vor view tagen geschrieben

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 );
bueltge
quelle
7

Laden Sie den nächtlichen Build herunter und sehen Sie sich diese beiden Dateien an.

  • wp-includes / admin-bar.php
  • wp-include / class-wp-admin-bar.php

Die Klasse WP_Admin_Barist im Wesentlichen die 'API', während die Datei sie admin-bar.phpverwendet, um die Standardleiste zu erstellen und eine Menge Hooks auszulösen.

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

Das sind so ziemlich die Grundlagen - das ist alles, was ich selbst von einem schnellen Betrachter gesammelt habe (um ehrlich zu sein, es ist ein bisschen ärgerlich, dass der Haken admin_bar_menudie Instanz von nicht zurückgibt WP_Admin_Bar- ich hasse all diese Globalen!)

TheDeadMedic
quelle
2
Dieser Ärger wäre ein guter Grund, ein Ticket auf Trac zu eröffnen, damit wir es für WP 3.1.1 patchen können ...
EAMann
2
Zur Nachverfolgung : TheDeadMedic hat ein Ticket geöffnet und es wurde rechtzeitig für 3.1 aufgenommen, sodass Sie die globale Variable nicht lesen müssen. Sie wird als Referenz als erster Parameter übergeben.
Jan Fabry