web-dev-qa-db-ja.com

+新しい管理メニューからアイテムを削除するにはどうすればいいですか?

+新規管理メニューを単一のサブメニューイベント( "Veranstaltung")のみを表示するように制限したいと思います。基本的にユーザーは他のアイテムも作成することができますが、その+新規メニューからは作成できません。

+New Admin Menu

これは他のアイテムを削除することができるので、私はすでに「Adminimize」プラグインでそれを試みました、しかしあなたが直接「+ New」をクリックするとそれは新しいメディアリンクをそのままにしておきます。

+New Admin Menu - link still there

以下のように、左側の管理メニューから項目を削除するためのロジックを追加しました。

function remove_menus() {

    remove_menu_page('edit.php?post_type=mdocs-posts');
 }
 add_action('admin_menu', 'remove_menus');

しかし、+ Newを変更する方法がわかりません。何かヒントは?

ありがとうございました!

1
sailingthoms

すべてを隠すには(メニューとサブメニュー) -

function wpse_260669_remove_new_content(){
    global $wp_admin_bar;
    $wp_admin_bar->remove_menu( 'new-content' );
}
add_action( 'wp_before_admin_bar_render', 'wpse_260669_remove_new_content' );

特定のメニュー/サブメニュー項目を非表示にする -

function wpse_260669_remove_new_content_items(){
    global $wp_admin_bar;
    $wp_admin_bar->remove_menu( 'new-post' ); // hides post CPT
    $wp_admin_bar->remove_menu( 'new-product' ); // hides product CPT
    $wp_admin_bar->remove_menu( 'new-page' ); // hides page CPT
    $wp_admin_bar->remove_menu( 'new-media' ); // hides media
}
add_action( 'wp_before_admin_bar_render', 'wpse_260669_remove_new_content_items' );

つまり、基本的な規則は - です。

function your_boo_bar_function() {
    global $wp_admin_bar;
    $wp_admin_bar->remove_menu( 'your-unique-menu-id' );
}
add_action( 'wp_before_admin_bar_render', 'your_boo_bar_function' );

新しいメニューを追加します -

function wpse_260669_add_menu(){
    global $wp_admin_bar;
    $wp_admin_bar->add_node(
        array(
            'id'        => 'google-menu',
            'title'     => 'Google',
            'href'      => 'http://google.com',
            'parent'    => 'new-content', // so, it'll be set as a child of 'new-content'. remove this to use this as a parent menu
            'meta'      => array( 'class' => 'my-custom-class' ),
        )
    );

}
add_action( 'wp_before_admin_bar_render', 'wpse_260669_add_menu' );

既存のメニューを更新する -

既存のメニュー項目を更新したい場合は、目的のメニューのIDを使用して新しい項目を追加するだけです。

+ New( 'content-new')を更新するには、このコードを使用します -

function wpse_260669_update_menu(){
    global $wp_admin_bar;
    $wp_admin_bar->add_node(
        array(
            'id'    => 'new-content', // id of an existing menu
            'href'  => 'your_new_url_goes_here', // set new URL
        )
    );

}
add_action( 'wp_before_admin_bar_render', 'wpse_260669_update_menu' );

メニューIDの取得方法 -

最も簡単な方法は、Firebugで要素を調べてIDを取得することです。このスクリーンショットを見てください -

How to get menu ID

目的のメニュー項目に移動して、wp-admin-bar-の横にある文字列を取得します。

6
mukto90

@ mukto90の回答をフォローアップするために、以下はツールバーにあるすべての他のノードのノードID($wp_admin_bar->remove_node()に渡す必要があるもの)をリストするメニューをツールバーに追加します。

add_action ('wp_before_admin_bar_render', 'add_all_node_ids_to_toolbar'), 99999) ;

function
add_all_node_ids_to_toolbar ()
{
    global $wp_admin_bar ;

    if (!current_user_can ('manage_options')) {
        // allow only "admins" to have our menu
        return ;
        }

    $all_toolbar_nodes = $wp_admin_bar->get_nodes () ;

    if (empty ($all_toolbar_nodes)) {
        // there are no top-level nodes, so bail
        return ;
        }

    // add our top-level menu to the toolbar
    $our_node_id = 'node_ids' ;
    $args = array (
        'id' => $our_node_id,
        'title' => "Node ID's",
        ) ;
    $wp_admin_bar->add_node ($args) ;

    // add all current Toolbar items to their parent node or to our top-level menu
    foreach ($all_toolbar_nodes as $node) {
        $args = array (
            'id' => "{$our_node_id}_{$node->id}", // prefix id with "node_id_" to make it a unique id
            'title' => $node->id,
            ) ;

        if (!(isset ($node->parent) && $node->parent)) {
            // the node has no parent, so add it to our top-level menu
            $args['parent'] = $our_node_id ;
            }
        else {
            // the node has a parent, so add it as a child to appropriate node in our menu
            $args['parent'] = "{$our_node_id}_{$node->parent}" ;
            }

        $wp_admin_bar->add_node ($args) ;
        }

    return ;
}

別のアプローチは投稿タイプのshow_in_admin_barプロパティを利用することです。投稿タイプが登録されている場合(組み込みの投稿タイプとカスタム投稿タイプの両方)、それらを「新規」ツールバーメニューに含めるかどうかを宣言します。

$args = array (
    'show_in_admin_bar' => true|false,
    ) ;
register_post_type ('post_type_name', $args) ;

ですから、あなたが登録したCPTのために、あなたがそれらを "New"ツールバーメニューに表示させたくない場合は、単に'show_in_admin_bar' => false,を設定してください。 show_in_admin_bar$argsに指定されていない場合は、デフォルトでshow_in_menuの値になります。詳しくは register_post_type() をご覧ください。

内蔵はどうですか?あなたは、あなたが望まないものを以下で削除することができます:

add_action ('wp_before_admin_bar_render', 'remove_from_toolbar_new') ;

function
remove_from_toolbar_new ()
{
    $allow_in_toolbar_new = array (
        'page', // if you don't want any built-ins, just make this an empty array
        ) ;

    $args = array (
        '_builtin' => true,
        'show_in_admin_bar' => true,
        ) ;
    foreach (get_post_types ($args, 'objects') as $post_type) {
        if (in_array ($post_type->name, $allow_in_toolbar_new)) {
            continue ;
            }

        $post_type->set_props (array ('show_in_admin_bar' => false)) ;
        }

    return ;
}

詳しくは get_post_types()WP_Post_Type :: set_props() をご覧ください。

私の知る限りでは、「新規」ツールバーメニューから「ユーザー」項目を削除する唯一の方法は、@ mukto90が言及している方法です。