web-dev-qa-db-ja.com

ツールバーからメニュー項目の配列を取得する方法

管理メニュー/サブメニューの配列を生成するのと同じです。

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

ここに貼り付けるには長すぎるので、この 貼り付けリンクのリスト全体を見ることができます 。しかし、以下は起動方法の抜粋です。 [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...

アクションフック 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);
}

:)

2

項目リストは非公開で直接アクセスすることはできないため、アクション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 );
1
fuxia