Czy można ukryć interfejs użytkownika / menu niestandardowego typu posta przed określonymi rolami użytkownika?


20

Chcę całkowicie ukryć interfejs użytkownika dla niestandardowego typu postu przed określonymi rolami użytkownika ... Wcześniej znalazłem wiele zasobów dotyczących wyłączania dostępu do korzystania z tych CPT, ale nic, co naprawdę pozwala na całkowite ukrycie interfejsu CPT wszystko razem na podstawie tego, który użytkownik jest zalogowany do pulpitu nawigacyjnego.

Jest to ważne, ponieważ potrzebuję klientów, aby całkowicie unikali niestandardowych typów postów dla sklepu, a jeśli mogą zobaczyć interfejs CPT sklepu na pulpicie nawigacyjnym, nie ma znaczenia, czy ich możliwości są ograniczone, ponieważ nadal będą pytać jak mogą w ten sposób samodzielnie dodać produkt.

Naprawdę wolę nie robić tego za pomocą wtyczki, ale jeśli jest coś, co może załatwić sprawę w nie nadęty sposób, to i tak byłoby świetnie.

Dziękuję za pomoc, SB

Odpowiedzi:


39

Aby ukryć element menu typu wpisu przed użytkownikami niebędącymi administratorami:

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 powinna być nazwą Twojego aktualnego typu posta.

EDYTOWAĆ-

inne strony menu, które możesz usunąć:

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

EDYCJA 2 -

Usuwanie elementów menu wtyczki.

W przypadku wtyczek wydaje się, że potrzebujesz tylko page=zapytania var. Inną rzeczą, na którą należy zwrócić uwagę, jest priorytet, który jest trzecim argumentem admin_menu add_action. Musi być ustawiony wystarczająco nisko (im wyższy numer, tym niższy priorytet), aby wtyczki dodały się już do 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 );

Takie proste rozwiązanie, dziękuję, że działało idealnie!
Mr.Brown

Ciekawe, czy wpse28782_remove_menu_itemsnazwa funkcji została wybrana losowo, czy jest to specyficzne dla WP? .... Ponadto, jak mógłbym rozwinąć ten pomysł i celować w dodatkowe CPT lub, jeśli to konieczne, inne natywne menu WP? Jeszcze raz dziękuję za pomoc!
Mr.Brown,

1
@ Mr.Brown - nazwa funkcji jest oparta na identyfikatorze twojego pytania (sprawdź adres URL), po prostu coś, co gwarantuje unikalność, możesz nazwać to, co chcesz, o ile nie jest to funkcja istniejąca. możesz także dodać dodatkowe remove_menu_pagepołączenia, aby usunąć inne CPT, a także inne elementy menu, zobacz moją edycję.
Milo,

Tak wspaniale, jeszcze raz dziękuję. To niesamowite rozwiązanie.
Mr.Brown

Jeszcze jedna rzecz - jak przejść do znalezienia nazwy szablonu używanej dla dodatkowych menu z aktualnie zainstalowanych wtyczek? to znaczy. remove_menu_page('cart_plugin');
Mr.Brown

2

Zaakceptowanej odpowiedzi można użyć do ukrycia niestandardowych typów postów (i innych różnych elementów) zgodnie z opisem. Ale jeśli chcesz ukryć samo menu wtyczki CPT UI , możesz w pierwszej kolejności usunąć akcję, która dodaje je do menu.

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

1

Możesz także użyć wtyczki Adminimize . Ta wtyczka ma opcje dla wszystkich typów postów, meta-boxów i wielu innych, aby ukryć się w różnych rolach. Bez kodowania.


0

Jeśli chcesz ukryć menu tej wtyczki o nazwie „Interfejs użytkownika niestandardowego typu postu”, czyli CPTUI, nie jest możliwe połączenie pierwszego linku z remove_menu_page.

Wszystko co musisz zrobić to ;

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

0

Aby ukryć podmenu Woocommerce w menu najwyższego poziomu „Produkty” dla wszystkich ról użytkowników Shop Managera (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

Jeśli remove_menu_pageto nie działa dla ciebie (to nie dla mnie), zamiast usunąć menu, alternatywą jest powiedzieć WordPressowi, aby nie wyświetlał menu dla typu posta:

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 );
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.