新的WordPress 3.1管理栏是否可插入,如何扩展它?


8

如何在插件中扩展WordPress 3.1管理栏的功能?

我正在寻找用于在管理栏中添加链接或其他功能的特定挂钩和过滤器。

Yoast WordPress SEO(WordPress插件)就是一个很好的例子。

替代文字

当前没有有关扩展管理栏的文档。根据食品法典,有两个过滤器可以将其关闭或不显示:

no_admin_bar()show_admin_bar()


3
您不仅可以在Yoast插件的使用上达到顶峰,还是可以简化一下代码呢?
t31os 2010年

1
同意t31os。在询问之前帮助您研究问题... ;-)
Denis de Bernardy 2010年

5
真?我认为这是一个好问题。这里的每个问题几乎都可以通过“做一些研究”来回答。当然,我可以深入研究Yoast的代码并找出他的工作方式,但是由于目前没有扩展管理栏的文档。Yoast WordPress SEO插件只是一个示例,因为我相信可以做的不仅仅是添加链接。
Chris_O 2010年

3.1是beta版本,因此针对可能会更改的功能而存在文档的可能性较小。不过请不要误会我的意思,我很想在期待3.1的情况下看到一些示例……(我倾向于使用稳定分支,因为我花了更多时间支持大多数用户在使用)。 。(或3.0.2中是?)
t31os 2010年

Answers:


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_barWP_Admin_Bar()WordPress中类的实例。它具有几种不同的方法和属性,但是显然,您最感兴趣的是add_menu()。此方法接受某些参数:

  • 标题 -默认为false
  • href-默认为false,
  • parent-默认为false-传递该菜单的子菜单的ID值
  • id-默认为已清理的标题值。
  • meta-默认false-下列任何选项的数组:array( 'html' => '', 'class' => '', 'onclick' => '', target => '' );

但是其余的WP_Admin_Bar()可插入的。这仅取决于您到底要做什么,以及您想如何做。

也可以看看:


很好的答案。我刚看完PHPXref。
Chris_O 2010年

11

一个小例子,我在观看日之前也在wp-hackers列表上写过

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

下载每晚版本,并检出这两个文件;

  • wp-includes / admin-bar.php
  • wp-includes / class-wp-admin-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-我讨厌所有这些全局变量!)


2
这种烦恼是在Trac打开票证的一个很好的理由,因此我们可以为WP 3.1.1补丁...
EAMann 2010年

2
后续操作:TheDeadMedic确实打开了一个票证,该票证已包含在3.1中,因此您无需读取全局变量,它将通过引用作为第一个参数传递。
1月Fabry
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.