web-dev-qa-db-ja.com

管理バーのリンクを変更する

line 474/wp-includes/admin-bar.phpから始めて、次のように宣言されている関数があります。

function wp_admin_bar_new_content_menu( $wp_admin_bar )

それが何をするかは、ユーザーが+ New機能を持つすべてのカスタム投稿タイプと共にedit_postsメニュー項目を生成します。実際のトップメニュー項目+ Newは、配列内で最初に呼び出されるのでpostsにデフォルト設定されます(私はそれがどのように機能するかと思います)。最初の+ Newリンクを他のものに実際に変更したいのですが。私たちの設定では、ユーザーにedit_postsに高度なカスタムフィールドオプションページを管理させる能力を与える必要がありますが、彼らに投稿自体へのアクセスを与えていません(メニューシステムから隠すだけです)。ちょっとファンキーですが、それは私たちにとって使いやすさの問題です。

上記のすべての寄せ集めの他に、アイテム自体のID(この場合はnew-content)に基づいて既存のメニューリンクを変更できますか、それともメニュー自体を破棄して再構築する必要がありますか?そのhref属性を#に変更しようとしています。ありがとうございます。

5
Zach

私は以前にadmin-barを使ったことがありません。しかし、私はあなたの質問がおもしろいと思って見てみることにしました。アクションフック 'admin_bar_menu'を処理し、優先度を70より高く設定する関数を追加すると、アクセスしようとしているプロパティを変更できる生のadmin_bar_menuノードにアクセスできます。以下はテーマのfunctions.phpファイルからadmin-menu-barを操作する方法の詳細な例です。

add_action( 'admin_bar_menu', 'customize_my_wp_admin_bar', 80 );
function customize_my_wp_admin_bar( $wp_admin_bar ) {

    //Get a reference to the new-content node to modify.
    $new_content_node = $wp_admin_bar->get_node('new-content');

    // Parent Properties for new-content node:
        //$new_content_node->id     // 'new-content'
        //$new_content_node->title  // '<span class="ab-icon"></span><span class="ab-label">New</span>'
        //$new_content_node->parent // false
        //$new_content_node->href   // 'http://www.somedomain.com/wp-admin/post-new.php'
        //$new_content_node->group  // false
        //$new_content_node->meta['title']   // 'Add New'

    //Change href
    $new_content_node->href = '#';

    //Update Node.
    $wp_admin_bar->add_node($new_content_node);

    //Remove an existing menu item.
    $wp_admin_bar->remove_menu('new-post');

    // Properties for new-post node:
        //$new_content_node->id     // 'new-post'
        //$new_content_node->title  // 'Post'
        //$new_content_node->parent // 'new-content'
        //$new_content_node->href   // 'http://www.somedomain.com/wp-admin/post-new.php'
        //$new_content_node->group  // false
        //$new_content_node->meta   // array()


    // Adding a new custom menu item that did not previously exist.
    $wp_admin_bar->add_menu( array(
               'id'    => 'new-custom-menu',
               'title' => 'Custom Menu',
               'parent'=> 'new-content',
               'href'  => '#custom-menu-link',)
            );

}

これを自分のfunctions.phpファイルに追加した場合は、管理メニューバーの次の変更に注意してください。

  1. +新しいリンクは '#'になりました
  2. 新規投稿へのリンクは表示されなくなりました。
  3. '#custom-menu-link'を指すカスタムメニューリンクと呼ばれる新しいメニューリンクが追加されました

宜しくお願いします、

デビッドキャロル

8
David Carroll

David Carrollに素晴らしい答えを追加するには(ありがとう)、既存の管理バーメニューのノード名(スラッグ名)を取得し、それを変更する可能性を得るためには、この新しいコードを見なければなりません。コンテンツメニュー.

ul#wp-admin-bar-new-content-default liにはすべてのID魔女がその名前で終わっています。例:li#wp-admin-bar-new-postまたはli#wp-admin-bar-new-mediaここで、new-postまたはnew-mediaは、get_node()関数で使用できる名前です。

私の目的のために、私はリンクの名前をnew Post にカスタムのものに変更することを付け加えます。

//Get a reference to the new-post node to modify.
$new_post_node = $wp_admin_bar->get_node('new-post');

//Change title
$new_post_node->title = __('Interventions', 'NAME-OF-YOUR-THEME');

//Update Node.
$wp_admin_bar->add_node($new_post_node);
1
anou