Özel Yazı Türü Kullanıcı Arayüzü / Menüsünü belirli Kullanıcı Rollerinden gizlemek mümkün mü?


20

Yapmak istediğim şey, özel bir kullanıcı türü için özel bir yazı türü için kullanıcı arayüzünü tamamen gizlemek ... Daha önce bu CPT'leri kullanmaya erişimi devre dışı bırakma konusunda birçok kaynak buldum, ancak CPT kullanıcı arayüzünü tamamen gizlemenize izin veren hiçbir şey yok hepsi birlikte kullanıcının kontrol panelinde oturum açtığına göre.

Bu, müşterilerin mağaza için özel posta türlerinden tamamen uzak durmalarına ihtiyaç duyduğum için önemlidir ve mağaza CPT kullanıcı arayüzünü gösterge panosunda görebiliyorlarsa, hala sorgulayacakları için yetenekleri kısıtlanırsa bir fark yaratmaz. sonuç olarak kendi başlarına ürün ekleme konusunda nasıl ilerleyebilecekleri.

Id gerçekten bir eklenti ile bunu başarmak için tercih, ancak yine de büyük olurdu şişirilmemiş bir şekilde hile yapabilir bir şey varsa varsayalım.

Yardımınız için teşekkürler, SB

Yanıtlar:


39

Bir yayın türü menü öğesini yönetici olmayan kullanıcılardan gizlemek için:

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 gerçek gönderi türünüzün adı olmalıdır.

DÜZENLE-

kaldırabileceğiniz diğer menü sayfaları:

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

DÜZENLEME 2 -

Eklenti menü öğelerini kaldırma.

Eklentiler için sadece page=var sorgusuna ihtiyacınız var gibi görünüyor . Dikkat edilmesi gereken diğer bir şey, üçüncü argüman olan önceliktir admin_menu add_action. Eklentilerin menüye zaten eklenmiş olması için yeterince düşük ayarlanmalıdır (sayı ne kadar yüksekse, öncelik o kadar düşük olur).

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

Böyle basit bir çözüm, teşekkürler mükemmel çalıştı!
Mr.Brown

Meraklı, wpse28782_remove_menu_itemsrastgele seçtiğiniz bir işlev adı mı yoksa bu WP'ye özgü mü? .... Ayrıca, bu fikri genişletmeye ve ek CPT'leri hedeflemeye ya da diğer yerel WP menülerini nasıl ele alacağım? Yardım için tekrar teşekkürler!
Mr.Brown

1
@ Mr.Brown - işlev adı, sorunuzun kimliğine dayanır (url'yi kontrol edin), benzersiz olduğu garanti edilen bir şeydir, mevcut bir işlev olmadığı sürece istediğinizi adlandırabilirsiniz. remove_menu_pagediğer CPT'leri ve diğer menü öğelerini kaldırmak için ek çağrılar da ekleyebilirsiniz , düzenlememe bakın.
Milo

Çok müthiş, tekrar teşekkürler. Bu inanılmaz bir çözüm.
Mr.Brown

Son bir şey - şu anda yüklü olan eklentilerden ek menüler için kullanılan şablon adını nasıl bulabilirim? yani. remove_menu_page('cart_plugin');
Mr.Brown

2

Kabul edilen cevap, açıklandığı gibi özel yazı türlerini (ve diğer çeşitli öğeleri) gizlemek için kullanılabilir. Ancak CPT UI eklenti menüsünün kendisini gizlemek istiyorsanız , ilk olarak menüye ekleyen eylemi de kaldırabilirsiniz.

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

1

Ayrıca Yönetici eklentisini de kullanabilirsiniz . Bu eklenti, farklı rollerde gizlenecek tüm yazı türleri, meta kutular ve daha fazlası için seçeneklere sahiptir. Kodlama yok.


0

Eklentinin "Özel Gönderi Türü Kullanıcı Arayüzü" olarak da adlandırılan CPTUI menüsünü gizlemek istiyorsanız, ilk bağlantıyı remove_menu_page ile birleştirmek mümkün değildir.

Tüm yapman gereken ;

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

0

Woocommerce alt menülerini, tüm Shop Manager kullanıcı rolleri için üst düzey "Ürünler" menüsü altında gizlemek için (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

Eğer remove_menu_pagemenüyü kaldırmak yerine o (benim için yoktu) sizin için işi değil, alternatif sonrası türü için menüyü göstermek için değil WordPress söylemektir:

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 );
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.