如何从工具栏中获取一组菜单项?

时间:2016-09-05 作者:Ethan O\'Sullivan

类似于生成管理菜单/子菜单的数组:

global $menu;
foreach ( $menu as $group => $item ) {
    echo \'<pre>\'; print_r( $item ); echo \'</pre>\';
}
如何获取工具栏中所有可用菜单项的数组?我试着用global $wp_admin_bar 变量,但这似乎不是正确的。

Toolbar

我之所以要生成这个数组,是为了在我的插件中使用它来提供一个选项,选择要从工具栏隐藏哪些项目,允许用户自定义其设置。现在,我手动创建了一个名为$toolbar 要选择要隐藏自己的项目,请执行以下操作:

global $wp_admin_bar;
$toolbar = array(
    \'wp-logo\', // WordPress logo
    \'comments\', // Comments
    \'new-post\', // New > Post
    \'search\' // Search
    );
foreach ( $toolbar as $item ) {
    $wp_admin_bar -> remove_menu( $item );
}
更新[2016-09-16]在我的插件设置页面中,我可以使用以下内容获取整个列表:

global $wp_admin_bar;
echo \'<pre>\'; print_r( $wp_admin_bar ); echo \'</pre>\';
粘贴到此处太长,因此您可以在此查看整个列表Pastebin link. 然而,下面是它如何开始的一个片段。如何获取中的所有值[id] => 和/或[parent] =>? 看起来我需要经历几个层次的foreach?

WP_Admin_Bar Object (
    [nodes:WP_Admin_Bar:private] => Array (
            [user-actions] => stdClass Object (
                    [id] => user-actions
                    [title] => 
                    [parent] => my-account
                    [href] => 
                    [meta] => Array (
                            [class] => ab-submenu
                        )

                    [children] => Array (
                            [0] => stdClass Object (
                                    [id] => user-info
                                    [title] => Name
                                    [parent] => user-actions
                                    [href] => http://example.com/wp-admin/profile.php
                                    [meta] => Array (
                                            [tabindex] => -1
                                        )

                                    [children] => Array (
                                        )

                                    [type] => item
                                )

                            [1] => stdClass Object (
                                    [id] => edit-profile
                                    [title] => Edit My Profile
                                    [parent] => user-actions
                                    [href] => http://example.com/wp-admin/profile.php
                                    [meta] => Array (
                                        )

                                    [children] => Array (
                                        )

                                    [type] => item
                                )
and so on...

2 个回复
SO网友:Syed Fakhar Abbas

有一个动作钩admin_bar_menu 它将为您提供一系列管理栏菜单项。


add_action(\'admin_bar_menu\', \'get_admin_bar_header_array\');
public function get_admin_bar_header_array($admin_bar){
print_r($admin_bar);
}
:)

SO网友:fuxia

加入行动admin_bar_menu, 并使用该方法获取菜单项get_nodes(), 由于项目列表是私有的,无法直接访问:

add_action( \'admin_bar_menu\', function( \\WP_Admin_Bar $wp_admin_bar ) {

    $items = $wp_admin_bar->get_nodes();

    if ( ! $items )
        return;

    print \'<pre>\';

    foreach ( $items as $id => $item )
    {
        print "$id: " . print_r( $item, TRUE ) . "\\n";
    }

    print \'</pre>\';
}, PHP_INT_MAX );

相关推荐

reset data of an array

我需要在此查询中进行一种重置,以便在检测到从不同IP看到的一定数量的视频时,发送警报消息,这里的要点是,当用户在特定时间内从不同IP观看例如4个视频并向您发送警报消息时,满足条件,问题是,如果用户看到另一个视频,他会再次发送警报,但是看到的视频不再进入第一个条件,我如何才能让它尊重它,当用户看到第五个不再发送消息时,有人能帮我吗?我对php了解不多wp\\U reset等功能_ṕosdata和wp\\u reset\\u query()可以为我服务吗?function qz_log_watch() {&#