¿Se puede conectar la nueva barra de administración de WordPress 3.1 y cómo puedo extenderla?

8

¿Cómo puedo extender las funciones de la barra de administración de WordPress 3.1 en mis complementos?

Estoy buscando ganchos y filtros específicos para agregar enlaces u otras funciones a la barra de administración.

Un buen ejemplo de lo que ya se ha hecho es Yoast WordPress SEO (Wordpress Plugin) .

texto alternativo

Actualmente no hay documentación disponible para extender la barra de administración. Según The Codex, hay dos filtros para apagarlo o no mostrarlo:

no_admin_bar() Y show_admin_bar()

Chris_O
fuente
3
¿No puede simplemente echar un vistazo a cómo lo hace el complemento Yoast, o es el código un poco abstracto para que tenga sentido?
t31os
1
De acuerdo con t31os. Es
útil
55
De Verdad? Creo que esta es una buena pregunta. Casi todas las preguntas aquí se pueden responder "investigando un poco". Por supuesto, podría investigar el código de Yoast y averiguar cómo lo hizo, pero como es ahora, no existe documentación sobre cómo extender la barra de administración. El plugin Yoast WordPress SEO fue solo un ejemplo, ya que estoy seguro de que se puede hacer más que solo agregar enlaces.
Chris_O
3.1 está en beta, es menos probable que exista documentación para la funcionalidad que está sujeta a cambios. Sin embargo, no me malinterpreten, me gustaría ver algunos ejemplos antes de 3.1 ... (tiendo a usar la rama estable ya que paso más tiempo dando soporte a lo que sea que esté utilizando la mayoría de los usuarios) ... . (¿o es esto en 3.0.2?)
t31os

Respuestas:

16

El complemento de Yoast es en realidad un muy buen ejemplo si todo lo que quiere hacer es agregar menús. Básicamente, la barra de administración es solo un conjunto alternativo de enlaces a las mismas páginas de administración de complementos que tiene en la barra lateral. Para agregar el menú SEO de nivel superior, Yoast hace lo siguiente:

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

Esto agrega un menú llamado "wpseo-menu" a la barra de administración y dirige a los usuarios al tablero del complemento cuando hacen clic en el enlace. Los enlaces secundarios se agregan de manera similar:

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

Simplemente especifique el "padre" del menú que está agregando.

Luego puede ir tan profundo como sea necesario, llamando $wp_admin_bar->add_menu()cuando lo necesite y especificando la información adecuada.


Como referencia, la variable $wp_admin_bares una instancia de la clase WP_Admin_Bar()dentro de WordPress. Se dispone de varios métodos y propiedades diferentes, pero el que más nos interesa aquí es, obviamente, add_menu(). Este método acepta ciertos parámetros:

  • title - por defecto falso
  • href : falso predeterminado,
  • parent - default false - pasa el valor de ID para un submenú de ese menú
  • id : el valor predeterminado del título es desinfectado.
  • meta - default false - array de cualquiera de las siguientes opciones:array( 'html' => '', 'class' => '', 'onclick' => '', target => '' );

Pero el resto de la WP_Admin_Bar()clase es conectable. Solo depende de qué es exactamente lo que estás tratando de hacer y cómo quieres hacerlo.

Ver también:

EAMann
fuente
Muy buena respuesta. Acabo de terminar de mirar el PHPXref.
Chris_O
11

pequeño ejemplo, escribí esto también en la lista de wp-hackers antes de ver los días

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
fuente
7

Descargue la compilación nocturna y consulte estos dos archivos;

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

La clase WP_Admin_Bares esencialmente la 'API', mientras que el archivo la admin-bar.phpusa para construir la barra predeterminada y disparar una carga de ganchos.

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

Eso es más o menos lo básico: esto es todo lo que he recopilado de un vistazo rápido a mí mismo (para ser honesto, es un poco molesto que el gancho admin_bar_menuno pase por alto la instancia de WP_Admin_Bar- ¡Odio a todos estos globales!)

TheDeadMedic
fuente
2
Esa molestia sería una buena razón para abrir un ticket en Trac para que podamos parchearlo para WP 3.1.1 ...
EAMann
2
Para el seguimiento: TheDeadMedic abrió un ticket y se incluyó a tiempo para 3.1, por lo que no necesita leer la variable global, se pasará por referencia como primer parámetro.
Jan Fabry