完整示例以快速(mu)插件为例:
<?php
/** Plugin Name: Add Admin Bar Icon */
add_action( \'admin_bar_menu\', function( \\WP_Admin_Bar $bar )
{
$bar->add_menu( array(
\'id\' => \'wpse\',
\'parent\' => null,
\'group\' => null,
\'title\' => __( \'Example\', \'some-textdomain\' ),
\'href\' => get_edit_profile_url( get_current_user_id() ),
\'meta\' => array(
\'target\' => \'_self\',
\'title\' => __( \'Hello\', \'some-textdomain\' ),
\'html\' => \'<p>Hello</p>\',
\'class\' => \'wpse--item\',
\'rel\' => \'friend\',
\'onclick\' => "alert(\'Hello\');",
\'tabindex\' => PHP_INT_MAX,
),
) );
} );
这会将以下HTML作为第一个元素呈现(因此也会使我们的管理栏无用,但这不是本示例的重点):
<li id="wp-admin-bar-wpse" class="wpse--item">
<a class="ab-item" tabindex="9223372036854775807" href="http://astro.dev/wp-admin/profile.php" onclick="alert(\\\'Hello\\\');" target="_self" title="Hello" rel="friend">Example</a>
<p>Hello</p>
</li>
现在我们有了基础,我们可以关心。。。
添加图标是一个令人伤心的消息:没有简单的方法可以做到这一点。至少不需要添加自己的样式表。正如您所读到的(代码中),发生了一些事情:我预先编写了包装所需的HTMLa Dashicon 在实际项目之前。然后,我在操作中添加了一个非常高的整数作为最后一个数字-这就是决定项目在管理栏中位置的原因。
<?php
/** Plugin Name: Add Admin Bar Icon */
add_action( \'admin_bar_menu\', function( \\WP_Admin_Bar $bar )
{
$bar->add_menu( array(
\'id\' => \'wpse\',
\'title\' => \'<span class="ab-icon"></span>\'.__( \'Example\', \'some-textdomain\' ),
\'href\' => get_edit_profile_url( get_current_user_id() ),
\'meta\' => array(
\'target\' => \'_self\',
\'title\' => __( \'Ahoi!\', \'some-textdomain\' ),
\'html\' => \'<!-- Custom HTML that goes below the item -->\',
),
) );
}, 210 ); // <-- THIS INTEGER DECIDES WHERE THE ITEM GETS ADDED (Low = left, High = right)
add_action( \'wp_enqueue_scripts\', function()
{
wp_enqueue_style( /* register your stylesheet */ );
}
最后,您需要在自己的样式表中添加一些CSS规则。唯一可移动的部分是
wpse
在
#/id
. 其余部分对于所有管理栏项目/节点都是常量和相等的。您可能还需要调整
top
定位以适合Dashicon。只需从他们的站点中选择一个Dashicon并添加
fXXX
下面CSS中的代码。
#wpadminbar #wp-admin-bar-wpse .ab-icon:before {
font: normal 20px/1 dashicons;
content: \'\\f306\';
position: relative;
float: left;
speak: never;
padding: 4px 0;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
background-image: none !important;
margin-right: 6px;
}