ฉันควรดำเนินการอย่างไรเมื่อเพิ่มบทบาทและความสามารถ


10

ฉันจะใช้ add_role () และ $ role-> add_cap () เพื่อตั้งค่าบทบาทที่กำหนดเองใหม่และแนบความสามารถใหม่กับบทบาทที่มีอยู่

ฉันสงสัยว่าที่ที่ดีที่สุดในการทำเช่นนี้คืออะไร? เห็นได้ชัดว่าฉันสามารถทำมันได้โดยตรงในฟังก์ชั่น PHP และสามารถทำได้ด้วย แต่นี่เป็นวิธีปฏิบัติที่ดีที่สุดใช่ไหม ฉันต้องทำสิ่งนี้กับ admin_init หรือไม่ หรือฉันควรจะทำใน init?

ฉันไม่แน่ใจทั้งหมดว่าแนวทางปฏิบัติที่ดีที่สุดคืออะไรโดยใช้ init action hooks แทนที่จะปล่อยให้การเรียกใช้ฟังก์ชันโดยตรงภายใน functions.php

ขอบคุณสำหรับข้อมูลของคุณ!

คำตอบ:


10

เมื่อเพิ่มบทบาทและความสามารถคุณจะต้องเรียกใช้รหัสเพียงครั้งเดียวเนื่องจากบทบาทและความสามารถจะถูกบันทึกลงในฐานข้อมูลเมื่อใช้งานadd_roleหรือ->add_capฟังก์ชั่นเช่นเดียวกับ Andy ที่บอกว่าคุณสามารถใช้after_setup_themeสำหรับการกระทำประเภทนี้ แต่เพิ่มการตรวจสอบบางประเภทเท่านั้น ทำงานหนึ่งครั้งเช่นregister_activation_hookหรือใช้ตัวเลือก:

add_action('after_setup_theme','my_add_role_function');

function my_add_role_function(){
    $roles_set = get_option('my_roles_are_set');
    if(!$roles_set){
        add_role('my_role', 'my_roleUser', array(
            'read' => true, // True allows that capability, False specifically removes it.
            'edit_posts' => true,
            'delete_posts' => true,
            'upload_files' => true 
        ));
        update_option('my_roles_are_set',true);
    }
}

ขอบคุณสำหรับสิ่งนี้. เป็นความจริงที่ add_role หรือ add_cap ALWAYS ใช้ประโยชน์จากฐานข้อมูลหรือไม่ เมื่อฉันขุดลงในซอร์สโค้ดดูเหมือนว่ามันไม่ได้เป็นเช่นนี้เสมอไปเช่นในวิธีการส่วนใหญ่ของ WP_Roles จะมีการตรวจสอบว่า ($ this-> use_db) ซึ่งทำให้ฉันคิดว่ามีความเป็นไปได้ที่บทบาท อาจไม่ถูกเก็บไว้ในฐานข้อมูลเสมอ
Tom Auger

นอกจากนี้แทนที่จะตั้งค่าสถานะโดยใช้ตัวเลือกซึ่งไม่กระทบกับฉันโดยเฉพาะอย่างยิ่งการปรับขนาดได้ไม่มีวิธีง่ายๆในการค้นหาว่าบทบาทนั้นถูกสร้างขึ้นหรือไม่? หากไม่เป็นเช่นนั้นจะเกิดอันตรายอะไรขึ้นกับการกำหนดบทบาทใหม่ถ้ามีอยู่แล้ว คุณจะได้รับบทบาทซ้ำซ้อนหรือไม่หรือไม่ ดูอีกครั้งที่ความสามารถในการ. php ฉันเห็นสิ่งนี้ภายใต้ add_role: ถ้า (isset ($ this-> บทบาท [$ role])) กลับมา; ซึ่งดูเหมือนจะบ่งบอกว่ามันจะไม่ซ้ำซ้อนกับบทบาทจึงไม่เป็นอันตราย
Tom Auger

ไม่แน่ใจว่าคุณหมายถึงอะไร แต่ defualt อยู่$use_db = true;ในคลาส WP_Roles และสำหรับการตั้งค่าสถานะโดยใช้ตัวเลือกมันเป็นตัวอย่างคุณสามารถใช้register_activation_hookแต่ความคิดคือรหัสของคุณจะทำงานเพียงครั้งเดียวและวิธีที่คุณประหยัดเวลาของตัวเอง
Bainternet

ฉันไม่เคยเห็นสิ่งนี้มาก่อน แต่มันทำให้ฉันรู้สึกว่าการเปลี่ยนบทบาทเป็นปลั๊กอินแล้วใช้ประโยชน์จาก hooks การเปิดใช้งาน / การปิดใช้งานเพื่อเรียกการเปลี่ยนแปลงเพียงครั้งเดียว มีใครเคยไปตามเส้นทางนั้นบ้าง?
mrwweb

@mrwweb ที่ควรจะทำงานได้ดีเช่นกัน
Bainternet

7

สำหรับปลั๊กอินฉันประสบความสำเร็จในการใช้plugins_loadedสิ่งนี้ after_setup_themeสำหรับรูปแบบที่ผมจะใช้

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