Kemungkinan untuk menyembunyikan UI / Menu Jenis Kiriman Kustom dari Peran Pengguna tertentu?

20

Yang ingin saya lakukan adalah menyembunyikan sepenuhnya UI untuk jenis posting khusus dari peran pengguna tertentu ... Saya sebelumnya telah menemukan banyak sumber tentang cara menonaktifkan akses untuk menggunakan CPT tersebut, tetapi tidak ada yang benar-benar memungkinkan Anda untuk sepenuhnya menyembunyikan UI CPT. semuanya berdasarkan pada apa yang pengguna login ke dasbor.

Ini penting karena saya perlu klien untuk benar-benar keluar dari jenis posting kustom untuk toko, dan jika mereka dapat melihat UI toko CPT di dasbor masih tidak ada bedanya jika kemampuan mereka dibatasi karena mereka masih akan menanyakan bagaimana mereka bisa menambahkan produk sendiri sebagai hasilnya.

Saya benar-benar lebih suka untuk tidak melakukan ini dengan plugin tetapi jika ada sesuatu yang dapat melakukan trik dengan cara yang tidak membengkak yang masih akan menjadi hebat saya kira.

Terima kasih atas bantuan Anda, SB

Mr.Brown
sumber

Jawaban:

39

Untuk menyembunyikan item menu jenis posting dari pengguna non-admin:

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 harus menjadi nama jenis posting Anda yang sebenarnya.

EDIT-

halaman menu lain yang dapat Anda hapus:

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 -

Menghapus item menu plugin.

Untuk plugin, sepertinya Anda hanya perlu page=kueri var. Hal lain yang perlu diperhatikan adalah prioritas, yang merupakan argumen ketiga untuk admin_menu add_action. Itu harus diatur cukup rendah (semakin tinggi angkanya, semakin rendah prioritas) sehingga plugin telah menambahkan sendiri ke 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 );
Milo
sumber
Solusi yang sangat sederhana, terima kasih itu bekerja dengan sempurna!
Mr.Brown
Ingin tahu, apakah wpse28782_remove_menu_itemsnama fungsi yang Anda pilih secara acak atau ini khusus untuk WP? .... Juga, bagaimana saya akan memperluas gagasan ini dan menargetkan CPT tambahan, atau dalam hal ini menu WP asli lainnya? Sekali lagi terima kasih atas bantuannya!
Mr.Brown
1
@BrBrown - nama fungsi didasarkan pada id pertanyaan Anda (periksa url), hanya sesuatu yang dijamin unik, Anda dapat menamainya apa saja yang Anda inginkan selama itu bukan fungsi yang ada. Anda juga dapat menambahkan remove_menu_pagepanggilan tambahan untuk menghapus CPT lainnya, serta item menu lainnya, lihat edit saya.
Milo
Sangat luar biasa, terima kasih lagi. Ini solusi luar biasa.
Mr.Brown
Hanya satu hal terakhir - bagaimana cara mencari nama templat yang digunakan untuk menu tambahan dari plugin yang saat ini diinstal? yaitu. remove_menu_page('cart_plugin');
Mr.Brown
2

Jawaban yang diterima dapat digunakan untuk menyembunyikan jenis posting khusus (dan item berbagai macam lainnya) seperti yang dijelaskan. Tetapi jika Anda ingin menyembunyikan menu plugin CPT UI itu sendiri, Anda juga dapat menghapus tindakan yang menambahkannya ke menu.

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

Anda juga dapat menggunakan plugin Adminimize . Plugin ini memiliki opsi untuk semua jenis posting, kotak meta dan banyak lagi untuk disembunyikan di peran yang berbeda. Tanpa coding.

bueltge
sumber
0

Jika Anda ingin menyembunyikan menu plugin yang namanya "Custom Post Type UI" alias CPTUI, itu tidak mungkin dengan menggabungkan tautan pertama dengan remove_menu_page.

Yang harus Anda lakukan adalah;

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

Untuk menyembunyikan submenu Woocommerce di bawah menu "Produk" tingkat atas untuk semua peran pengguna Manajer Toko (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 );
Desain Grafis Linda Sturling
sumber
0

Jika remove_menu_pagetidak bekerja untuk Anda (bukan untuk saya) maka alih-alih menghapus menu, alternatifnya adalah memberi tahu WordPress untuk tidak menampilkan menu untuk jenis posting:

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
sumber