Может ли подключиться новая админ-панель WordPress 3.1 и как ее расширить?

8

Как я могу расширить функции админ-панели WordPress 3.1 в моих плагинах?

Я ищу конкретные хуки и фильтры для добавления ссылок или других функций в панель администратора.

Хорошим примером того, что уже было сделано, является Yoast WordPress SEO (плагин Wordpress) .

альтернативный текст

В настоящее время нет документации по расширению админ-бара. Согласно Кодексу, есть два фильтра, чтобы отключить или не показывать его:

no_admin_bar() & show_admin_bar()

Chris_O
источник
3
Можете ли вы не просто взглянуть на то, как это делает плагин Yoast, или код немного абстрагирован, чтобы иметь смысл?
t31os
1
Согласиться с т31ос. Это помогает исследовать ваш вопрос, прежде чем спрашивать ... ;-)
Дени де Бернарди
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_barявляется экземпляром класса WP_Admin_Bar()в WordPress. Она имеет несколько различных методов и свойств, но один вы наиболее заинтересованы в здесь, очевидно, add_menu(). Этот метод принимает определенные параметры:

  • title - по умолчанию false
  • href - по умолчанию false,
  • parent - по умолчанию false - передать значение идентификатора для подменю этого меню
  • id - по умолчанию используется очищенное значение заголовка.
  • meta - по умолчанию false - массив любой из следующих опций:array( 'html' => '', 'class' => '', 'onclick' => '', target => '' );

Но остальная часть WP_Admin_Bar()класса является подключаемым. Это зависит только от того, что именно вы пытаетесь сделать и как вы хотите это сделать.

Смотрите также:

EAMann
источник
Очень хороший ответ Я только что закончил просматривать PHPXref.
Chris_O
11

Небольшой пример, я должен был написать это также в списке wp-хакеров перед просмотром дней

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
источник
7

Загрузите ночную сборку и проверьте эти два файла;

  • WP-включает / администратор-bar.php
  • сор-включает / класса-WP-администратора-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- я ненавижу все эти глобалы!)

TheDeadMedic
источник
2
Это раздражение было бы хорошей причиной, чтобы открыть тикет на Trac, чтобы мы могли залатать его для WP 3.1.1 ...
EAMann
2
Для продолжения: TheDeadMedic действительно открыл тикет, и он был включен во время для 3.1, поэтому вам не нужно читать глобальную переменную, он будет передан по ссылке в качестве первого параметра.
Ян Фабри