问题描述
如何在我的插件中扩展 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()
类的其余部分是可插拔的。这只是取决于你正在努力做什么以及你想做什么。
也可以看看:
-
SVN of Yoast’s plug-in:通过文件中途阅读
wpseo_admin_bar()
中的菜单定义 -
WP_Admin_Bar()
类的 PHPXref
次佳解决方案
小例子,我在编辑 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。