สำหรับปลั๊กอินที่ฉันกำลังทำงานอยู่บนผมอยากจะให้ / จำกัด การเข้าถึงการตั้งค่าปลั๊กอิน (เช่นตามหน้าเมนูผู้ดูแลระบบ) บนต่อบทบาทฐาน
ดังนั้นผมต้องเพิ่มใหม่ปลั๊กอินที่เฉพาะเจาะจงcapability
user roles
ไปที่
น่าเสียดายที่คำตอบของไกเซอร์ดูเหมือนจะไม่ทำงานอีกต่อไปดังนั้นฉันจึงใช้เวลาพยายามหาวิธีการใช้งานฟังก์ชั่นดังกล่าวข้างต้น
กำหนดการ
ก่อนที่ฉันจะแบ่งปันรหัสของฉันกับคุณนี่คือสิ่งที่เกี่ยวกับในข้อความล้วน:
- เมื่อวันที่เปิดใช้งานปลั๊กอินเพิ่มความสามารถใหม่
THE_NEW_CAP
กับบทบาทการมีบางความสามารถในตัวBUILT_IN_CAP
(ในกรณีของฉัน: edit_pages
)
- ในการโหลดแต่ละหน้าให้ทำ1 (เช่นเพิ่มความสามารถอีกครั้ง) สิ่งนี้จำเป็นเฉพาะถ้าคุณต้องการบัญชีสำหรับบทบาทใหม่ที่เป็นไปได้ที่สร้างขึ้นหลังจากการเปิดใช้งานปลั๊กอิน ดังนั้นบทบาทใหม่เหล่านี้ไม่มีความสามารถเฉพาะปลั๊กอินแม้ว่าจะมีความสามารถในตัวที่จำเป็น
- ใช้ความสามารถใหม่สำหรับสิ่งที่คุณต้องการ ตามที่อธิบายไว้ก่อนหน้านี้ฉันใช้เพื่ออนุญาต / จำกัด การเข้าถึงหน้าเมนูผู้ดูแลระบบของปลั๊กอินดังนั้นจึงเป็นวิธีที่ทำได้ในตัวอย่างโค้ดต่อไปนี้
- ในการปิดใช้งานปลั๊กอินให้ลบความสามารถออก แน่นอนคุณสามารถทำได้เมื่อปลั๊กอินถูกถอนการติดตั้ง ไม่ว่าจะด้วยวิธีใดให้ทำในที่สุด
รหัส
และนี่คือรายการด้านบนที่ถูกแปลงเป็นรหัส:
»การตั้งค่า
class WPSE35165Plugin {
public function __construct() {
// Register hooks
register_activation_hook(__FILE__, array(__CLASS__, 'activation'));
register_deactivation_hook(__FILE__, array(__CLASS__, 'deactivation'));
// Add actions
add_action('admin_menu', array(__CLASS__, 'admin_menu'));
}
public function activation() {
self::add_cap();
}
// Add the new capability to all roles having a certain built-in capability
private static function add_cap() {
$roles = get_editable_roles();
foreach ($GLOBALS['wp_roles']->role_objects as $key => $role) {
if (isset($roles[$key]) && $role->has_cap('BUILT_IN_CAP')) {
$role->add_cap('THE_NEW_CAP');
}
}
}
»ใช้มัน
// Add plugin menu pages to admin menu
public function admin_menu() {
// Remove the following line if you don't care about new roles
// that have been created after plugin activation
self::add_cap();
// Set up the plugin admin menu
add_menu_page('Menu', 'Menu', 'THE_NEW_CAP', …);
add_submenu_page('wpse35165', 'Submenu', 'Submenu', 'THE_NEW_CAP', ...);
}
»ทำความสะอาดมัน
public function deactivation() {
self::remove_cap();
}
// Remove the plugin-specific custom capability
private static function remove_cap() {
$roles = get_editable_roles();
foreach ($GLOBALS['wp_roles']->role_objects as $key => $role) {
if (isset($roles[$key]) && $role->has_cap('THE_NEW_CAP')) {
$role->remove_cap('THE_NEW_CAP');
}
}
}
}
หมายเหตุ: โปรดอย่าใช้ความสามารถของตัวพิมพ์ใหญ่ นี่เป็นเพียงสำหรับการอ่าน