A nova barra de administração do WordPress 3.1 é conectável e como posso estendê-la?

8

Como posso estender as funções da barra de administração do WordPress 3.1 nos meus plugins?

Estou procurando por ganchos e filtros específicos para adicionar links ou outros recursos à barra de administração.

Um bom exemplo do que já foi feito é o Yoast WordPress SEO (Wordpress Plugin) .

texto alternativo

Atualmente, não há documentação disponível para estender a barra de administração. De acordo com o The Codex, existem dois filtros para desativá-lo ou não mostrá-lo:

no_admin_bar() & show_admin_bar()

Chris_O
fonte
3
Você não pode apenas entender como o plugin Yoast faz isso ou o código é um pouco abstrato para entender?
T31os
11
Concordando com t31os. Ela ajuda a pesquisar sua pergunta antes ... ;-)
Denis de Bernardy
5
Mesmo? Eu acho que essa é uma boa pergunta. Praticamente todas as perguntas aqui podem ser respondidas "pesquisando". É claro que eu poderia pesquisar no código do Yoast e descobrir como ele fez isso, mas como é agora, não existe documentação sobre a extensão da barra de administração. O Yoast WordPress SEO Plugin foi apenas um exemplo, pois tenho certeza de que mais pode ser feito do que adicionar links.
Chris_O
3.1 está na versão beta, é menos provável que exista documentação para funcionalidades sujeitas a alterações. Porém, não me entenda mal, eu ficaria curioso para ver alguns exemplos antes de 3.1 ... (eu costumo usar a ramificação estável porque passo mais tempo suportando o que quer que a maioria dos usuários esteja) ... . (ou é isso em 3.0.2?)
t31os 07/12/2010

Respostas:

16

O plug-in do Yoast é realmente um exemplo muito bom se tudo o que você quer fazer é adicionar menus. Basicamente, a barra de administrador é apenas um conjunto alternativo de links para as mesmas páginas de administrador de plug-in que você possui na barra lateral. Para adicionar o menu SEO de nível superior, o Yoast faz o seguinte:

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

Isso adiciona um menu chamado "wpseo-menu" à barra de administrador e direciona os usuários para o painel do plug-in quando eles clicam no link. Links filho são adicionados de maneira semelhante:

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

Você acabou de especificar o "pai" do menu que está adicionando.

Depois, você pode ir o mais fundo possível, ligando $wp_admin_bar->add_menu()quando necessário e especificando as informações apropriadas.


Para referência, a variável, $wp_admin_baré uma instância da classe WP_Admin_Bar()no WordPress. Ele tem vários métodos e propriedades diferentes, mas o que mais lhe interessa aqui é, obviamente add_menu(),. Este método aceita certos parâmetros:

  • title - padrão false
  • href - padrão false,
  • pai - padrão falso - transmita o valor do ID para um submenu desse menu
  • id - o padrão é um valor de título higienizado.
  • meta - default false - array de qualquer uma das seguintes opções:array( 'html' => '', 'class' => '', 'onclick' => '', target => '' );

Mas o resto da WP_Admin_Bar()classe é conectável. Depende apenas do que exatamente você está tentando fazer e como deseja fazê-lo.

Veja também:

EAMann
fonte
Resposta muito boa. Acabei de examinar o PHPXref.
21710 Chris_O
11

pequeno exemplo, eu escrevi isso também na lista wp-hackers antes de ver os dias

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

Faça o download da compilação noturna e verifique esses dois arquivos;

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

A classe WP_Admin_Baré essencialmente a 'API', enquanto o arquivo a admin-bar.phputiliza para criar a barra padrão e disparar uma 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');

Isso é basicamente o básico - isso é tudo o que eu reuni de uma olhada rápida (para ser honesto, é um pouco irritante o gancho admin_bar_menunão retribuir a instância de WP_Admin_Bar- eu odeio todos esses globais!)

TheDeadMedic
fonte
2
Esse aborrecimento seria um bom motivo para abrir um bilhete no Trac para que possamos corrigi-lo para o WP 3.1.1 ...
EAMann
2
Para acompanhar: O TheDeadMedic abriu um ticket e foi incluído no tempo para 3.1, portanto, você não precisa ler a variável global; ela será passada por referência como o primeiro parâmetro.
Jan Fabry