É possível ocultar a interface do usuário / menu do tipo de postagem personalizada de funções de usuário específicas?

20

O que estou procurando fazer é ocultar completamente a interface do usuário para um tipo de postagem personalizado de funções de usuário específicas ... Anteriormente, encontrei muitos recursos sobre como desativar o acesso ao uso desses CPTs, mas nada que realmente permita ocultar completamente a interface do usuário do CPT todos juntos com base em qual usuário está conectado ao painel.

Isso é importante, pois eu preciso que os clientes fiquem completamente fora dos tipos de postagem personalizados para a loja e, se eles ainda conseguirem ver a interface da interface do usuário da loja no painel, não fará diferença se os recursos forem restritos, pois ainda serão solicitados. como eles podem adicionar produtos por conta própria como resultado.

Eu realmente prefiro não fazer isso com um plug-in, no entanto, se houver algo que possa fazer o truque de uma maneira sem inchaço que ainda seria ótimo, suponho.

Obrigado pela sua ajuda, SB

Sr Brown
fonte

Respostas:

39

Para ocultar um item de menu do tipo de postagem de usuários não administradores:

function wpse28782_remove_menu_items() {
    if( !current_user_can( 'administrator' ) ):
        remove_menu_page( 'edit.php?post_type=your_post_type' );
    endif;
}
add_action( 'admin_menu', 'wpse28782_remove_menu_items' );

your_post_type deve ser o nome do seu tipo de postagem real.

EDITAR-

outras páginas de menu que você pode remover:

remove_menu_page('edit.php'); // Posts
remove_menu_page('upload.php'); // Media
remove_menu_page('link-manager.php'); // Links
remove_menu_page('edit-comments.php'); // Comments
remove_menu_page('edit.php?post_type=page'); // Pages
remove_menu_page('plugins.php'); // Plugins
remove_menu_page('themes.php'); // Appearance
remove_menu_page('users.php'); // Users
remove_menu_page('tools.php'); // Tools
remove_menu_page('options-general.php'); // Settings

EDIT 2 -

Removendo itens de menu do plugin.

Para plugins, parece que você só precisa da page=consulta var. A outra coisa a observar é a prioridade, que é o terceiro argumento para o admin_menu add_action. Ele deve ser definido baixo o suficiente (quanto maior o número, menor a prioridade) para que os plug-ins já tenham se adicionado ao menu.

function wpse28782_remove_plugin_admin_menu() {
    if( !current_user_can( 'administrator' ) ):
        remove_menu_page('cart66_admin');
    endif;
}
add_action( 'admin_menu', 'wpse28782_remove_plugin_admin_menu', 9999 );
Milo
fonte
Uma solução tão simples, obrigado que funcionou perfeitamente!
Mr.Brown
Curioso, é o wpse28782_remove_menu_itemsnome de uma função que você escolheu aleatoriamente ou é específico do WP? Mais uma vez obrigado pela ajuda!
Mr.Brown
11
@ Mr.Brown - o nome da função é baseado no ID da sua pergunta (verifique o URL), apenas algo garantido como único, você pode nomear o que quiser, desde que não seja uma função existente. você também pode adicionar remove_menu_pagechamadas adicionais para remover outros CPTs e outros itens de menu, veja minha edição.
Milo
Tão incrível, obrigado novamente. Esta é uma solução incrível.
Mr.Brown
Apenas uma última coisa - como faço para encontrar o nome do modelo usado em menus adicionais de plug-ins atualmente instalados? ie remove_menu_page('cart_plugin');
Mr.Brown
2

A resposta aceita pode ser usada para ocultar tipos de postagem personalizados (e outros itens variados), conforme descrito. Mas se você deseja ocultar o menu do plug-in da interface do usuário da CPT , também pode remover a ação que o adiciona ao menu.

if( !current_user_can( 'administrator' ) ) {
    remove_action( 'admin_menu', 'cptui_plugin_menu' );
}
Conceder
fonte
1

Você também pode usar o plug- in Adminimize . Este plugin tem opções para todos os tipos de postagem, meta boxes e muito mais para ocultar em diferentes funções. Sem codificação.

bueltge
fonte
0

Se você deseja ocultar o menu desse plug-in cujo nome é "Custom Post Type UI", também conhecido como CPTUI, não é possível combinar o primeiro link com remove_menu_page.

Tudo o que tem a fazer é ;

function wpse_28782_remove_menus() {
    remove_menu_page('cptui_main_menu');
}
add_action('admin_init', 'wpse_28782_remove_menus');
merkdev
fonte
0

Para ocultar os submenus Woocommerce no menu de nível superior "Produtos" para todas as funções de usuário do Shop Manager (Wordpress 5.1.1):

function remove_menus_shopmgr(){

// If the current user is a shop manager
if ( current_user_can('shop_manager') ) {

   //removes Products > Categories submenu 
    remove_submenu_page( 'edit.php?post_type=product','edit-tags.php?taxonomy=product_cat&post_type=product' );

   //removes Products > Tags submenu
    remove_submenu_page( 'edit.php?post_type=product','edit-tags.php?taxonomy=product_tag&post_type=product' ); 

    }
}

add_action( 'admin_menu', 'remove_menus_shopmgr', 999 );
Linda Sturling Design Gráfico
fonte
0

Se remove_menu_pagenão funcionar para você (não funcionou para mim), em vez de remover o menu, uma alternativa é dizer ao WordPress para não mostrar o menu para o tipo de postagem:

function wpse28782_hide_menu_items() {
    if( !current_user_can( 'administrator' ) ) {
        $post_type = get_post_type_object( 'your_post_type');
        if ($post_type) {
            $post_type->show_in_menu = false;
        }
    }
}
add_action( 'admin_menu', 'wpse28782_hide_menu_items', 99 );
Brian Cryer
fonte