Можливо приховати користувальницький користувальницький тип інтерфейсу / меню від певних ролей користувача?


20

Що я хочу зробити, це повністю приховати інтерфейс користувача для користувацького типу публікації від конкретних ролей користувача ... Я раніше знаходив багато ресурсів щодо відключення доступу до використання цих CPT, але нічого, що насправді дозволяє повністю приховати інтерфейс CPT все разом, залежно від того, який користувач увійшов на інформаційну панель.

Це важливо, оскільки мені потрібні клієнти, щоб повністю не вживати типових постів для магазину, і якщо вони можуть побачити користувальницький інтерфейс CPT магазину на інформаційній панелі, це все одно не має значення, якщо їхні можливості обмежені, оскільки їх все ще збираються запитувати як вони можуть самостійно додати товар.

Я дійсно вважаю за краще не робити цього за допомогою плагіна, але якщо є щось, що може зробити трюк не роздутим способом, що все-таки було б чудово, я думаю.

Дякую за допомогу, СБ

Відповіді:


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 має бути назва вашого фактичного типу публікації.

EDIT-

інші сторінки меню, які ви можете видалити:

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 -

Видалення елементів меню плагінів.

Для плагінів, здається, потрібен лише 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? Ще раз дякую за допомогу!
Містер Броун

1
@ Mr.Brown - назва функції заснована на ідентифікаторі вашого запитання (перевірте URL-адресу), просто гарантовано унікальне, ви можете назвати його як завгодно, доки це не існуюча функція. Ви також можете додати додаткові remove_menu_pageдзвінки для видалення інших CPT, а також інших пунктів меню, див. мою редагування.
Міло,

Так чудово, ще раз дякую. Це дивовижне рішення.
Містер Броун

Ще одне останнє - як я можу шукати ім'я шаблону, яке використовується для додаткових меню з плагінів, які зараз встановлені? тобто. remove_menu_page('cart_plugin');
Mr.Brown

2

Прийнята відповідь може бути використана для приховування користувацьких типів публікацій (та інших різних асортиментів), як описано. Але якщо ви хочете приховати саме меню плагінів CPT UI , ви також можете видалити дію, яка додає його в меню в першу чергу.

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

1

Ви також можете використовувати плагін Adminimize . У цьому плагіні є параметри для всіх типів публікацій, метаполе і багато іншого, щоб сховатися на різні ролі. Відсутнє кодування.


0

Якщо ви хочете приховати меню цього плагіна, ім'я якого - "Користувацький інтерфейс типу пошти", відомий як CPTUI, неможливо поєднати перше посилання з видаленням_меню_сторінку.

Все, що вам потрібно зробити - це;

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

0

Щоб приховати підменю Woocommerce у меню верхнього рівня "Продукти" для всіх ролей користувача 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 );

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 );
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.