특정 사용자 역할에서 사용자 정의 게시물 유형 UI / 메뉴를 숨길 수 있습니까?


20

내가 원하는 것은 특정 사용자 역할에서 사용자 정의 게시물 유형의 UI를 완전히 숨기는 것입니다 ... 이전에 CPT를 사용하여 액세스를 비활성화하는 방법에 대한 많은 리소스를 찾았지만 실제로 CPT UI를 완전히 숨길 수있는 것은 없습니다 대시 보드에 로그인 한 사용자에 따라 모두 함께.

이것은 고객이 상점에 대한 사용자 정의 게시물 유형을 완전히 벗어나야하기 때문에 중요하며 고객이 대시 보드에서 상점 CPT UI를 여전히 볼 수 있다면 여전히 문의해야하기 때문에 기능이 제한 되어도 차이가 없습니다. 결과적으로 스스로 제품을 추가하는 방법.

ID는 실제로 플러그인 으로이 작업을 수행하지 않는 것을 선호하지만 비 팽창 방식으로 트릭을 수행 할 수있는 것이 있다면 여전히 좋을 것입니다.

도와 주셔서 감사합니다, SB

답변:


39

비 관리자 사용자로부터 게시물 유형 메뉴 항목을 숨기려면

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 실제 게시물 유형의 이름이어야합니다.

편집하다-

제거 할 수있는 다른 메뉴 페이지 :

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

편집 2-

플러그인 메뉴 항목을 제거합니다.

플러그인의 경우 page=쿼리 변수 만 필요합니다 . 주목해야 할 또 다른 사항은 우선 순위이며 이는의 세 번째 인수 admin_menu add_action입니다. 플러그인이 이미 메뉴에 추가되도록 충분히 낮게 설정해야합니다 (숫자가 높을수록 우선 순위가 낮음).

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

이러한 간단한 솔루션은 완벽하게 작동했습니다.
Mr.Brown

궁금한 점은 wpse28782_remove_menu_items임의로 선택한 기능 이름이거나 WP에만 해당됩니까? .... 또한이 아이디어를 확장하고 추가 CPT를 타겟팅하거나 다른 기본 WP 메뉴에 대해 어떻게 설명합니까? 도움에 다시 한번 감사드립니다!
Mr.Brown

1
@ Mr.Brown-함수 이름은 질문의 ID (URL 확인)를 기반으로하며 고유 한 것으로 보장되며 기존 함수가 아닌 한 원하는 이름을 지정할 수 있습니다. remove_menu_page다른 메뉴 항목뿐만 아니라 다른 CPT를 제거하기 위해 추가 통화를 추가 할 수도 있습니다 . 편집 내용을 참조하십시오.
Milo

다시 한번 감사합니다. 이것은 놀라운 솔루션입니다.
Mr.Brown

마지막 한 가지-현재 설치된 플러그인에서 추가 메뉴에 사용되는 템플릿 이름을 찾는 방법은 무엇입니까? 즉. remove_menu_page('cart_plugin');
Mr.Brown

2

허용 된 답변을 사용하여 설명 된대로 맞춤 게시물 유형 (및 기타 분류 된 항목)을 숨길 수 있습니다. 그러나 CPT UI 플러그인 메뉴 자체 를 숨기려면 메뉴에 메뉴에 추가하는 조치를 먼저 제거 할 수도 있습니다.

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

1

관리 플러그인을 사용할 수도 있습니다 . 이 플러그인에는 모든 게시물 유형, 메타 박스 등 다양한 역할에 대한 숨기기 옵션이 있습니다. 코딩이 없습니다.


0

CPTUI라고하는 "Custom Post Type UI"라는 플러그인 메뉴를 숨기려면 첫 번째 링크와 remove_menu_page를 결합하여 사용할 수 없습니다.

당신이해야 할 모든;

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

0

모든 Shop Manager 사용자 역할에 대한 최상위 메뉴 "제품"에서 Woocommerce 하위 메뉴를 숨기려면 (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 );

0

remove_menu_page메뉴를 제거하는 대신 당신을 위해 작동하지 않으면 (나를 위해 그렇지 않은 경우 ), 대안은 WordPress에 게시물 유형에 대한 메뉴를 표시하지 않도록 지시하는 것입니다.

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 );
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.