web-dev-qa-db-ja.com

WP_Admin_Barで特定のノードを編集する

WP_Admin_Bar global $wp_admin_barインスタンスのリンクを編集するのは 簡単にできる

3

はい 最近、管理バーのユーザー情報セクションにあるプロフィールリンクを変更したい状況に遭遇しました。問題は、すべてのノードを取得し、それらを追加および削除することしかできないということです。編集しないでください。また、$wp_admin_bar->nodesプロパティは非公開なので変更できません。

簡単にそれらを削除して追加すると、あなたはあなたの注文を失い、全体が恐ろしいように見えます。これが私の解決策です。

// void jw_edit_admin_bar ( mixed $id , string $property , string $value )

if(!function_exists('jw_edit_admin_bar')) {
    function jw_edit_admin_bar($id, $property, $value) {
        global $wp_admin_bar;

        if(!is_array($id)) {
            $id = array($id);
        }

        $all_nodes = $wp_admin_bar->get_nodes();

        foreach($all_nodes as $key => $val) {
            $current_node = $all_nodes[$key];
            $wp_admin_bar->remove_node($key);

            if(in_array($key, $id)) {
                $current_node->$property = $value;
            }

            $wp_admin_bar->add_node($current_node);
        }
    }
}

add_action('admin_bar_menu', function() { jw_edit_admin_bar(array('user-info', 'my-account'), 'href', 'http://www.nyan.cat'); });
7

わかりました、それで私は最近Wordpress Admin Toolbarのためにカスタムの休日/時刻グリーティングを作成しようとしている問題に遭遇しました。ノードを編集するために管理者ツールバーを破棄して再構築する必要はありません。

Julienの問題を解決する簡単な方法は、functions.phpファイルに5行追加して、目的のURLを置き換えることです。

    //-----------------------------------------------------------------------------
/* change location of user profile page in admin toolbar */
add_filter( 'edit_profile_url', 'update_admin_bar_user_profile_url', 10, 3 );
function update_admin_bar_user_profile_url( $url, $user_id, $scheme ) {
    $url = site_url( '/edit-user-profile/' );
    return $url;
}
//-----------------------------------------------------------------------------

管理ツールバーの編集/操作をもう少し深くしたいのであれば、ユーザーのWebサイトのURLをユーザーのプロファイルページにノードとして追加すると、ユーザーのWebサイトのURLが追加されます。パネル(別名「サブメニュー」のリンク):

    /* --- add the user website link node in the admin toolbar --- */
add_action( 'admin_bar_menu', 'update_admin_bar_user_node', 250 );
function update_admin_bar_user_node( $wp_admin_bar ) {
    $user_id = get_current_user_id();
    $current_user = wp_get_current_user();
    $profile_url = get_edit_profile_url( $user_id );

    if ( ! $user_id )
            return;

    if ( current_user_can( 'read' ) ) {
        $profile_url = get_edit_profile_url( $user_id );
    } elseif ( is_multisite() ) {
        $profile_url = get_dashboard_url( $user_id, 'profile.php' );
    } else {
        $profile_url = false;
    }

    // Add the users website/link to the user-actions sub-menu if they have one 
    $my_account = $wp_admin_bar->get_node( 'my-account' );
    if( ! empty( $current_user->user_url ) && $my_account ){
        $wp_admin_bar->add_node( array(
            'parent'    => 'user-actions',
            'id'        => 'user-url',
            'title'     => '<span class="user-url">' . __( 'My Website' ) . '</span>',
            'href'      => esc_url( $current_user->user_url )
        ) );
    }       
}

これは、その変更が "my-account" "user-actions"メニューにどのように表示されるかのスクリーンショットです。 enter image description here

2
Obewan