Özel yayın türünü yalnızca site yöneticisi rolüyle kısıtla


17

Bu özel yayın türünü yönetici olmayan kullanıcılar için kontrol panelinde gösterilmekten nasıl kaldırabilirim?

/* Add Websites Custom Post Type */
add_action( 'init', 'create_website_type' );
function create_website_type() {

    register_post_type( 'website',
        array(
            'labels' => array(
                'name' => __( 'Websites' ),
                'singular_name' => __( 'Website' ),
                'add_new' => __( 'Add New Website' ),
                'add_new_item' => __( 'Add New Website' ),
                'edit' => __( 'Edit Website' ),             
                'edit_item' => __( 'Edit Website' ),                
                'new_item' => __( 'Add New Website' ),              
                'view' => __( 'View Website' ),         
                'view_item' => __( 'View Website' ),                    
                'search_items' => __( 'Search Websites' ),  
                'not_found' => __( 'No Websites Found' ),
                'not_found_in_trash' => __( 'No Websites found in Trash' ),                                         
            ),
            'description' => __('Websites to be shown in Resources section.'),
            'public' => true,
            'show_ui' => true,
            'publicly_queryable' => true,
            'exclude_from_search' => false,
            'menu_position' => 20,
            'supports' => array('title', 'editor'),
            'can_export' => true        
        )
    ); 
    remove_post_type_support('website','editor'); 
}

Yanıtlar:


13

register_post_type()capabilitiesargümanlarında bir parametreyi kabul eder . get_post_type_capabilities()Olası değerler için bakınız . Yorumlardan:

Varsayılan olarak, yedi anahtar yetenekler dizisinin bir parçası olarak kabul edilir:

  • edit_post, read_postve delete_post, meta bağlamlarıdır ve bunlar daha sonra genellikle bağlama / okunan / silinen gönderi ve denetlenen kullanıcı veya rol olacak olan bağlama bağlı olarak ilgili ilkel yeteneklerle eşleştirilir. Bu nedenle, bu yetenekler genellikle doğrudan kullanıcılara veya rollere verilmez.

  • edit_posts - Bu yazı türündeki nesnelerin düzenlenip düzenlenemeyeceğini denetler.

  • edit_others_posts- Bu tür diğer kullanıcıların sahip olduğu nesnelerin düzenlenip düzenlenemeyeceğini denetler. Yazı tipi bir yazarı desteklemiyorsa, bu şekilde davranacaktır edit_posts.
  • publish_posts - Bu yazı türündeki yayınlama nesnelerini denetler.
  • read_private_posts - Özel nesnelerin okunup okunamayacağını kontrol eder.

Bu dört ilkel yetenek, çeşitli yerlerde çekirdek olarak kontrol edilir. Ayrıca, map_meta_cap()yukarıda belirtilen üç meta yeteneği alan ve bağlama göre kullanıcıya veya role karşı kontrol edilmesi gereken bir veya daha fazla ilkel yeteneğe dönüştüren hariç, doğrudan çekirdekte referans edilmeyen yedi temel öğe daha vardır .

  • read - Bu yazı türündeki nesnelerin okunup okunamayacağını denetler.
  • delete_posts - Bu yazı türündeki nesnelerin silinip silinemeyeceğini denetler.
  • delete_private_posts - Özel nesnelerin silinip silinemeyeceğini denetler.
  • delete_published_posts - Yayınlanan nesnelerin silinip silinemeyeceğini denetler.
  • delete_others_posts- Diğer kullanıcıların sahip olduğu nesnelerin silinip silinemeyeceğini kontrol eder. Yazı tipi bir yazarı desteklemiyorsa, bu şekilde davranacaktır delete_posts.
  • edit_private_posts - Özel nesnelerin düzenlenip düzenlenemeyeceğini kontrol eder.
  • edit_published_posts - Yayınlanan nesnelerin düzenlenip düzenlenemeyeceğini kontrol eder.

Bu ek özellikler yalnızca map_meta_cap(). Bu nedenle, yalnızca yazı tipi (varsayılan ) olarak 'map_meta_cap'ayarlanmış argümanla kaydedildiyse varsayılan olarak atanırlar .truefalse

Kayıt argümanlarınıza şunları ekleyin:

'capabilities' => array(
    'edit_post'          => 'update_core',
    'read_post'          => 'update_core',
    'delete_post'        => 'update_core',
    'edit_posts'         => 'update_core',
    'edit_others_posts'  => 'update_core',
    'delete_posts'       => 'update_core',
    'publish_posts'      => 'update_core',
    'read_private_posts' => 'update_core'
),

Yöneticilerin ve editörlerin cpt'ye erişmesine izin vermek dışında aynı şeyi nasıl yapardınız?
urok93

@drtanz Hem özel bir yetenek hem de filtre verin user_has_cap. Örnek için bu cevaba bakınız .
fuxia

Bunu önerdiğin gibi yapabilir miyim, ama update_core yerine manage_links özelliğini (yöneticiler ve editörler arasında paylaşılır) koyabilir miyim?
urok93

@drtanz Evet, ancak özel bir yetenek kullanırım. Bağlantı yöneticisi sonunda kaldırılacak ve o zaman atanan yeteneklere ne olacağını bilmiyorsunuz.
fuxia

2
Update_core hakkında not; Yalnızca tek site kurulumlarının yöneticileri bu özelliğe sahiptir. Çoklu Sitede, yalnızca Süper Yönetici'nin bu özellikleri vardır.
numediaweb
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.