如何从+新建管理菜单中删除项目?

时间:2017-03-20 作者:sailingthoms

我想限制+新管理菜单仅显示单个子菜单事件(“Veranstaltung”)。基本上,用户也可以创建其他项目,但不能从该+新菜单创建。

+New Admin Menu

我已经用“Adminimize”插件尝试过了,因为它可以删除其他项目,但一旦你直接单击“+新建”,它将保持新媒体链接不变。

+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。有什么提示吗?

非常感谢。

3 个回复
最合适的回答,由SO网友:mukto90 整理而成

To hide everything (menu and submenu)-

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

To hide specific menu/submenu item(s)-

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

So, the basic rule is-

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

Add a new menu-

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

Update an existing menu-

如果要更新现有菜单项,只需使用所需菜单的ID添加新项即可。

要更新+新建(“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\' );

How to get menu ID-

最简单的方法是用Firebug检查元素并获取ID。参见此屏幕截图-

How to get menu ID

导航到所需的菜单项并获取旁边的字符串wp-admin-bar-

SO网友:Paul \'Sparrow Hawk\' Biron

为了跟进@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 ;
}

SO网友:Paul \'Sparrow Hawk\' Biron

另一种方法是利用show_in_admin_bar 帖子类型的属性。注册帖子类型(内置和自定义帖子类型)时,它们会声明是否“希望”包含在“新建”工具栏菜单中

$args = array (
    \'show_in_admin_bar\' => true|false,
    ) ;
register_post_type (\'post_type_name\', $args) ;
因此,对于您注册的CPT,如果您不希望它们出现在“新建”工具栏菜单中,只需设置\'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提到的技术。