จำกัด ประเภทโพสต์ที่กำหนดเองให้กับบทบาทผู้ดูแลไซต์เท่านั้น


17

ฉันจะลบประเภทโพสต์ที่กำหนดเองนี้ออกจากการแสดงในแดชบอร์ดสำหรับผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบได้อย่างไร

/* 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'); 
}

คำตอบ:


13

register_post_type()ยอมรับพารามิเตอร์capabilitiesในอาร์กิวเมนต์ ดูget_post_type_capabilities()ค่าที่เป็นไปได้ จากความคิดเห็นที่:

โดยค่าเริ่มต้นเจ็ดคีย์ได้รับการยอมรับเป็นส่วนหนึ่งของอาร์เรย์ความสามารถ:

  • edit_post, read_postและdelete_postเป็นความสามารถของเมตาซึ่งโดยทั่วไปจะถูกแมปกับความสามารถดั้งเดิมที่สอดคล้องกันขึ้นอยู่กับบริบทซึ่งจะเป็นการโพสต์ที่กำลังแก้ไข / อ่าน / ลบและผู้ใช้หรือบทบาทที่กำลังตรวจสอบอยู่ ดังนั้นความสามารถเหล่านี้โดยทั่วไปจะไม่ได้รับอนุญาตโดยตรงกับผู้ใช้หรือบทบาท

  • edit_posts - ควบคุมว่าวัตถุประเภทโพสต์นี้สามารถแก้ไขได้

  • edit_others_posts- ควบคุมว่าวัตถุประเภทนี้เป็นของผู้ใช้รายอื่นสามารถแก้ไขได้ หากโพสต์ประเภทไม่สนับสนุนผู้เขียนแล้วจะมีลักษณะเช่นedit_postsนี้
  • publish_posts - ควบคุมการเผยแพร่วัตถุประเภทโพสต์นี้
  • read_private_posts - ควบคุมว่าสามารถอ่านวัตถุส่วนตัวได้หรือไม่

ความสามารถดั้งเดิมทั้งสี่นี้มีการตรวจสอบเป็นหลักในสถานที่ต่าง ๆ นอกจากนี้ยังมีความสามารถดั้งเดิมอื่น ๆ อีกเจ็ดประการที่ไม่ได้อ้างอิงโดยตรงในแกนหลักยกเว้นmap_meta_cap()ซึ่งจะใช้ความสามารถเมตาทั้งสามดังกล่าวข้างต้นและแปลความสามารถเหล่านั้นเป็นความสามารถดั้งเดิมอย่างน้อยหนึ่งอย่างที่จะต้องตรวจสอบกับผู้ใช้หรือบทบาท

  • read - ควบคุมว่าสามารถอ่านออบเจกต์ประเภทโพสต์นี้ได้หรือไม่
  • delete_posts - ควบคุมว่าจะลบวัตถุประเภทโพสต์นี้หรือไม่
  • delete_private_posts - ควบคุมว่าจะลบวัตถุส่วนตัวได้ไหม
  • delete_published_posts - ควบคุมว่าจะลบวัตถุที่เผยแพร่หรือไม่
  • delete_others_posts- ควบคุมว่าจะลบวัตถุที่เป็นของผู้ใช้รายอื่น หากโพสต์ประเภทไม่สนับสนุนผู้เขียนแล้วจะมีลักษณะเช่นdelete_postsนี้
  • edit_private_posts - ควบคุมว่าจะแก้ไขวัตถุส่วนตัวได้ไหม
  • edit_published_posts - ควบคุมว่าจะแก้ไขวัตถุที่เผยแพร่หรือไม่

map_meta_cap()ความสามารถเพิ่มเติมเหล่านี้จะใช้เฉพาะใน ดังนั้นจะมีการกำหนดโดยค่าเริ่มต้นเฉพาะเมื่อมีการลงทะเบียนประเภทโพสต์ด้วย'map_meta_cap'อาร์กิวเมนต์ตั้งค่าเป็นtrue(ค่าเริ่มต้นคือfalse)

ในอาร์กิวเมนต์การลงทะเบียนของคุณเพิ่ม:

'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'
),

คุณจะทำสิ่งเดียวกัน แต่อนุญาตให้ผู้ดูแลระบบและผู้แก้ไขเข้าถึง cpt ได้อย่างไร
urok93

@drtanz user_has_capให้ทั้งความสามารถในการที่กำหนดเองและตัวกรอง ดูคำตอบนี้สำหรับตัวอย่าง
fuxia

ฉันจะทำแบบเดียวกับที่คุณแนะนำ แต่ใส่ความสามารถ Manage_links (แชร์ระหว่างผู้ดูแลระบบและบรรณาธิการ) แทน update_core
urok93

@drtanz ใช่ แต่ฉันจะใช้ความสามารถที่กำหนดเอง ตัวจัดการลิงก์จะถูกลบออกในที่สุดและคุณไม่รู้ว่าเกิดอะไรขึ้นกับความสามารถที่ได้รับมอบหมาย
fuxia

2
หมายเหตุเกี่ยวกับ update_core มีเพียงผู้ดูแลระบบของการติดตั้งไซต์เดียวเท่านั้นที่มีความสามารถนี้ ใน Multisite เฉพาะ Super Admin เท่านั้นที่มีความสามารถนี้
numediaweb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.