La nouvelle barre d'administration WordPress 3.1 est-elle enfichable et comment puis-je l'étendre?


8

Comment puis-je étendre les fonctions de la barre d'administration WordPress 3.1 dans mes plugins?

Je recherche des crochets et des filtres spécifiques à utiliser pour ajouter des liens ou d'autres fonctionnalités à la barre d'administration.

Un bon exemple de ce qui a déjà été fait est le SEO Yoast WordPress (Plugin Wordpress) .

texte alternatif

Actuellement, aucune documentation n'est disponible sur l'extension de la barre d'administration. Selon The Codex, il existe deux filtres pour l'éteindre ou ne pas l'afficher:

no_admin_bar() & show_admin_bar()


3
Ne pouvez-vous pas simplement prendre un aperçu de la façon dont le plugin Yoast le fait, ou le code est-il un peu abstrait pour donner un sens?
t31os

1
D'accord avec t31os. Il est utile de rechercher votre question avant de demander ... ;-)
Denis de Bernardy

5
Vraiment? Je pense que c'est une bonne question. Presque toutes les questions ici peuvent être répondues en "faisant des recherches". Bien sûr, je pouvais fouiller le code de Yoast et découvrir comment il l'avait fait, mais comme c'est le cas actuellement, aucune documentation sur l'extension de la barre d'administration n'existe. Le plug-in SEO Yoast WordPress n'était qu'un exemple, car je suis sûr que plus peut être fait que d'ajouter des liens.
Chris_O

3.1 est en version bêta, il est moins probable que la documentation existe pour les fonctionnalités susceptibles d'être modifiées. Ne vous méprenez pas cependant, je serais curieux de voir quelques exemples moi-même en prévision de la 3.1 ... (j'ai tendance à utiliser la branche stable car je passe plus de temps à supporter la majorité des utilisateurs) ... . (ou est-ce dans 3.0.2?)
t31os

Réponses:


16

Le plug-in de Yoast est en fait un très bon exemple si tout ce que vous voulez faire est d'ajouter des menus. Fondamentalement, la barre d'administration n'est qu'un ensemble alternatif de liens vers les mêmes pages d'administration de plug-in que vous avez dans la barre latérale. Pour ajouter le menu SEO de niveau supérieur, Yoast fait ce qui suit:

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

Cela ajoute un menu nommé "wpseo-menu" à la barre d'administration et dirige les utilisateurs vers le tableau de bord du plug-in lorsqu'ils cliquent sur le lien. Les liens enfants sont ajoutés de la même manière:

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

Vous spécifiez simplement le "parent" du menu que vous ajoutez.

Ensuite, vous pouvez aller aussi loin que vous le souhaitez, en appelant $wp_admin_bar->add_menu()quand vous en avez besoin et en spécifiant les informations appropriées.


Pour référence, la variable $wp_admin_barest une instance de la classe WP_Admin_Bar()dans WordPress. Il a plusieurs méthodes et propriétés différentes, mais celle qui vous intéresse le plus ici est évidemment add_menu(). Cette méthode accepte certains paramètres:

  • title - false par défaut
  • href - false par défaut,
  • parent - false par défaut - passez la valeur ID pour un sous-menu de ce menu
  • id - par défaut à une valeur de titre filtrée.
  • meta - default false - tableau de l'une des options suivantes:array( 'html' => '', 'class' => '', 'onclick' => '', target => '' );

Mais le reste de la WP_Admin_Bar()classe est enfichable. Cela dépend simplement de ce que vous essayez de faire exactement et de la façon dont vous voulez le faire.

Voir également:


Très bonne réponse. Je viens de terminer la recherche sur PHPXref.
Chris_O

11

petit exemple, j'avais également écrit ceci sur la liste des pirates informatiques avant de voir les jours

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

Téléchargez la version nocturne et consultez ces deux fichiers;

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

La classe WP_Admin_Barest essentiellement l '«API», tandis que le fichier l' admin-bar.phputilise pour créer la barre par défaut et déclencher une charge de crochets.

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

C'est à peu près les bases - c'est tout ce que j'ai rassemblé d'un coup d'œil rapide moi-même (pour être honnête, c'est un peu ennuyeux que le crochet admin_bar_menune repasse pas l'instance de WP_Admin_Bar- je déteste tous ces globaux!)


2
Cette contrariété serait une bonne raison d' ouvrir un ticket sur Trac afin que nous puissions le corriger pour WP 3.1.1 ...
EAMann

2
Pour suivre : TheDeadMedic a ouvert un ticket et il a été inclus dans le temps pour 3.1, vous n'avez donc pas besoin de lire la variable globale, elle sera transmise par référence comme premier paramètre.
Jan Fabry
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.