¿Es posible ocultar la IU / Menú de tipo de publicación personalizada de roles de usuario específicos?

20

Lo que estoy buscando hacer es ocultar completamente la interfaz de usuario para un tipo de publicación personalizada de roles de usuario específicos ... Anteriormente encontré muchos recursos sobre cómo deshabilitar el acceso al uso de esos CPT, pero nada que realmente le permita ocultar completamente la interfaz de usuario de CPT todo junto según el usuario que haya iniciado sesión en el panel de control.

Esto es importante ya que necesito que los clientes se mantengan completamente fuera de los tipos de publicaciones personalizadas para la tienda, y si pueden ver la IU de CPT de la tienda en el tablero todavía no hace ninguna diferencia si sus capacidades están restringidas ya que todavía van a preguntar como resultado, pueden agregar productos por su cuenta.

Realmente preferiría no lograr esto con un complemento, sin embargo, si hay algo que pueda hacer el truco de una manera no hinchada que aún sería genial, supongo.

Gracias por tu ayuda, SB

Mr.Brown
fuente

Respuestas:

39

Para ocultar un elemento de menú de tipo de publicación de usuarios que no son 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 debe ser el nombre de su tipo de publicación real.

EDITAR-

Otras páginas de menú que puede eliminar:

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

EDITAR 2 -

Eliminar elementos del menú de complementos.

Para los complementos, parece que solo necesita la page=consulta var. La otra cosa a tener en cuenta es la prioridad, que es el tercer argumento para el admin_menu add_action. Debe establecerse lo suficientemente bajo (cuanto mayor sea el número, menor será la prioridad) para que los complementos ya se hayan agregado al menú.

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
fuente
Una solución tan simple, ¡gracias, funcionó perfectamente!
Mr.Brown
Curioso, ¿es wpse28782_remove_menu_itemsun nombre de función que elegiste al azar o es específico de WP? ... Además, ¿cómo haría para ampliar esta idea y apuntar a CPT adicionales, o incluso a otros menús de WP nativos? ¡Gracias de nuevo por la ayuda!
Mr.Brown
1
@ Mr.Brown: el nombre de la función se basa en la identificación de su pregunta (verifique la url), solo algo garantizado como único, puede nombrarlo como desee siempre que no sea una función existente. También puede agregar remove_menu_pagellamadas adicionales para eliminar otros CPT, así como otros elementos del menú, consulte mi edición.
Milo
Tan increíble, gracias de nuevo. Esta es una solución asombrosa.
Mr.Brown
Solo una última cosa: ¿cómo hago para encontrar el nombre de la plantilla que se usa para los menús adicionales de los complementos que están instalados actualmente? es decir. remove_menu_page('cart_plugin');
Mr.Brown
2

La respuesta aceptada se puede usar para ocultar tipos de publicaciones personalizadas (y otros elementos variados) como se describe. Pero si desea ocultar el menú del complemento CPT UI , también puede eliminar la acción que lo agrega al menú en primer lugar.

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

También puede usar el complemento Administrar . Este complemento tiene opciones para todos los tipos de publicaciones, meta cuadros y muchos más para esconderse en diferentes roles. Sin codificación

bueltge
fuente
0

Si desea ocultar el menú de ese complemento cuyo nombre es "IU de tipo de publicación personalizada", también conocido como CPTUI, no es posible combinar el primer enlace con remove_menu_page.

Todo lo que tienes que hacer es ;

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

Para ocultar los submenús de Woocommerce en el menú de nivel superior "Productos" para todas las funciones de usuario de 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 Diseño gráfico
fuente
0

Si remove_menu_pageno funciona para usted (no lo hizo para mí), en lugar de eliminar el menú, una alternativa es decirle a WordPress que no muestre el menú para el tipo de publicación:

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
fuente