问题描述

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

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

已经完成的一个很好的例子是 Yoast WordPress SEO (WordPress Plugin)

目前,在扩展管理栏上没有可用的文档。根据 The Codex 有两个过滤器关闭或不显示它:

no_admin_bar()& show_admin_bar()

最佳解决方案

Yoast 的 plug-in 其实是一个非常好的例子,如果你想做的是添加菜单。基本上,管理栏只是连接到侧边栏中相同的 plug-in 管理页面的另一组链接。要添加 top-level SEO 菜单,Yoast 执行以下操作:

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

它将一个名为”wpseo-menu” 的菜单添加到管理栏,并在用户点击链接时将用户引导到 plug-in 的仪表板。儿童链接以类似的方式添加:

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

您只需指定要添加的菜单的”parent” 。

然后,您可以根据需要去深入,当您需要并指定适当的信息时,请致电 $wp_admin_bar->add_menu()


为了参考,变量 $wp_admin_bar 是 WordPress 中 WP_Admin_Bar()类的一个实例。它有几种不同的方法和属性,但您最感兴趣的是显然是 add_menu()。此方法接受某些参数:

  • title – 默认为 false

  • href – 默认为 false,

  • parent – default false – 传递该菜单的子菜单的 ID 值

  • id – 默认为消除标题值。

  • 任何以下选项的元 – 默认假数组:array( 'html' => '', 'class' => '', 'onclick' => '', target => '' );

WP_Admin_Bar()类的其余部分是可插拔的。这只是取决于你正在努力做什么以及你想做什么。

也可以看看:

次佳解决方案

小例子,我在编辑 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 );

第三种解决方案

下载每夜构建,并查看这两个文件;

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

这几乎是基础知识 – 这是我从一个快速的 gander 自己收集的 (老实说,这有点烦人的钩子 admin_bar_menu 不传回 WP_Admin_Bar 的实例 – 我讨厌所有这些全局变量!)

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。