Có thể ẩn UI / Menu loại bài đăng tùy chỉnh khỏi các vai trò người dùng cụ thể không?


20

Những gì tôi muốn làm là ẩn hoàn toàn UI cho loại bài đăng tùy chỉnh khỏi các vai trò người dùng cụ thể ... Trước đây tôi đã tìm thấy nhiều tài nguyên về cách vô hiệu hóa quyền truy cập để sử dụng các CPT đó nhưng không có gì thực sự cho phép bạn ẩn hoàn toàn UI CPT tất cả cùng nhau dựa trên những gì người dùng đã đăng nhập vào bảng điều khiển.

Điều này rất quan trọng vì tôi cần khách hàng tránh xa các loại bài đăng tùy chỉnh cho cửa hàng và nếu họ có thể thấy UI CPT của cửa hàng trong bảng điều khiển vẫn không có gì khác biệt nếu khả năng của họ bị hạn chế do họ vẫn sẽ hỏi làm thế nào họ có thể tự mình thêm sản phẩm.

Id thực sự không muốn thực hiện điều này với một plugin tuy nhiên nếu có một cái gì đó có thể thực hiện thủ thuật theo cách không cồng kềnh mà tôi vẫn cho là tuyệt vời.

Cảm ơn sự giúp đỡ của bạn, SB

Câu trả lời:


39

Để ẩn một mục menu loại bài đăng từ người dùng không phải quản trị viên:

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 nên là tên của loại bài viết thực tế của bạn.

CHỈNH SỬA-

các trang menu khác bạn có thể loại bỏ:

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

CHỈNH SỬA 2 -

Loại bỏ các mục menu plugin.

Đối với các plugin, có vẻ như bạn chỉ cần page=truy vấn var. Điều khác cần lưu ý là ưu tiên, đó là đối số thứ ba cho admin_menu add_action. Nó phải được đặt đủ thấp (số càng cao, mức độ ưu tiên càng thấp) để các plugin đã tự thêm vào 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 );

Một giải pháp đơn giản như vậy, cảm ơn bạn nó đã làm việc hoàn hảo!
Mr.Brown

Tò mò, có phải là wpse28782_remove_menu_itemstên hàm bạn chọn ngẫu nhiên hay đây là tên cụ thể của WP? .... Ngoài ra, tôi sẽ mở rộng ý tưởng này như thế nào và nhắm mục tiêu thêm CPT, hay cho vấn đề khác của menu WP gốc? Cảm ơn một lần nữa vì sự giúp đỡ!
Mr.Brown

1
@ Mr.Brown - tên hàm dựa trên id của câu hỏi của bạn (kiểm tra url), chỉ cần một cái gì đó được đảm bảo là duy nhất, bạn có thể đặt tên theo bất cứ thứ gì bạn muốn miễn là nó không phải là một chức năng hiện có. bạn cũng có thể thêm các remove_menu_pagecuộc gọi bổ sung để loại bỏ các CPT khác, cũng như các mục menu khác, xem phần chỉnh sửa của tôi.
Milo

Thật tuyệt vời, cảm ơn một lần nữa. Đây là một giải pháp tuyệt vời.
Mr.Brown

Chỉ một điều cuối cùng - làm thế nào để tôi tìm thấy tên mẫu được sử dụng cho các menu bổ sung từ các plugin hiện đang được cài đặt? I E. remove_menu_page('cart_plugin');
Mr.Brown

2

Câu trả lời được chấp nhận có thể được sử dụng để ẩn các loại bài đăng tùy chỉnh (và các loại khác) như được mô tả. Nhưng nếu bạn muốn ẩn menu plugin CPT UI , bạn cũng có thể xóa hành động thêm nó vào menu ở vị trí đầu tiên.

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

1

Bạn cũng có thể sử dụng plugin Adminizing . Plugin này có các tùy chọn cho tất cả các loại bài đăng, hộp meta và nhiều thứ khác để ẩn trên các vai trò khác nhau. Không mã hóa.


0

Nếu bạn muốn ẩn menu của plugin đó có tên là "UI Loại bài đăng tùy chỉnh" hay còn gọi là CPTUI, thì không thể kết hợp liên kết đầu tiên với remove_menu_page.

Tât cả nhưng điêu bạn phải lam la ;

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

0

Để ẩn các menu con Wooc Commerce trong menu cấp cao nhất "Sản phẩm" cho tất cả các vai trò người dùng của Trình quản lý cửa hàng (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

Nếu remove_menu_pagekhông phù hợp với bạn (nó không phù hợp với tôi) thì thay vì xóa menu, một cách khác là bảo WordPress không hiển thị menu cho loại bài đăng:

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 );
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.