Đối với một plugin tôi hiện đang làm việc, tôi muốn cấp / hạn chế quyền truy cập vào các cài đặt plugin (nghĩa là các trang menu theo quản trị viên) trên cơ sở mỗi vai trò .
Do đó, tôi đã phải thêm một plugin mới dành riêng capability
chouser roles
.
Thật không may, câu trả lời của kaiser dường như không còn hoạt động nữa, vì vậy tôi đã dành thời gian cố gắng tìm ra cách cho phép các chức năng được đề cập ở trên.
Thời khóa biểu
Trước khi tôi chia sẻ mã của mình với bạn, đây là tất cả những gì về nó, bằng văn bản thuần túy:
- Khi kích hoạt plugin, hãy thêm khả năng mới
THE_NEW_CAP
cho các vai trò có khả năng tích hợp nhất định BUILT_IN_CAP
(trong trường hợp của tôi edit_pages
:).
- Trên mỗi lần tải trang, làm 1. (nghĩa là thêm khả năng, một lần nữa). Điều này chỉ cần thiết nếu bạn muốn tính đến các vai trò mới có thể đã được tạo sau khi kích hoạt plugin. Do đó, các vai trò mới này không có khả năng dành riêng cho plugin, ngay cả khi chúng có khả năng tích hợp sẵn theo yêu cầu.
- Sử dụng khả năng mới cho bất cứ điều gì bạn muốn. Như đã giải thích trước đây, tôi sử dụng nó để cấp / hạn chế quyền truy cập vào các trang menu quản trị viên của plugin, vì vậy đó là cách nó được thực hiện trong ví dụ mã sau.
- Khi tắt plugin, loại bỏ khả năng. Tất nhiên, bạn cũng có thể làm điều này khi plugin đang được gỡ cài đặt. Dù bằng cách nào, hãy làm điều đó cuối cùng.
Mật mã
Và đây là danh sách trên được chuyển đổi thành mã:
»Thiết lập nó
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');
}
}
}
" Sử dụng nó
// 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', ...);
}
»Dọn dẹp
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');
}
}
}
}
Lưu ý: Vui lòng không sử dụng khả năng viết hoa. Điều này chỉ để đọc.