Şu anda üzerinde çalışmakta olduğum bir eklenti için, rol bazında eklenti ayarlarına (yani, yönetici menüsü sayfalarına göre) erişim izni vermek / kısıtlamak istedim .
Bu nedenle, yapmak zorundaydım yeni eklenti-özgü eklemek capability
içinuser roles
.
Ne yazık ki, kaiser'in yanıtı artık çalışmıyor gibi görünüyor, bu yüzden yukarıda belirtilen işlevsellik için nasıl izin verileceğini bulmak için biraz zaman harcadım.
Program
Kodumu sizinle paylaşmadan önce, bunun neyle ilgili olduğu, düz metin halinde:
- Eklenti etkinleştirme işleminde,
THE_NEW_CAP
belirli bir yerleşik yeteneği olan rollere yeni yetenek ekleyin BUILT_IN_CAP
(benim durumumda:) edit_pages
.
- Her sayfa yüklemesinde, 1 yapın (yani, yeteneği tekrar ekleyin). Bu, yalnızca eklentinin etkinleştirilmesinden sonra oluşturulan olası yeni rolleri hesaba katmak istediğinizde gereklidir. Dolayısıyla, bu yeni roller, gerekli yerleşik yeteneklere sahip olsalar bile, eklentiye özgü özelliğe sahip değildir.
- İstediğiniz şey için yeni yeteneği kullanın. Daha önce açıklandığı gibi, eklentinin yönetici menüsü sayfalarına erişim izni vermek / kısıtlamak için kullanıyorum, böylece aşağıdaki kod örneğinde böyle yapılır.
- Eklenti devre dışı bırakıldığında, özelliği kaldırın. Tabii ki, eklenti kaldırılırken de bunu yapabilirsiniz. Her iki durumda da, sonunda yapın.
Kod
Ve işte yukarıdaki liste koda dönüştürülmüş:
»Kurma
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');
}
}
}
»Kullanma
// 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', ...);
}
»Temizleme
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');
}
}
}
}
Not: Lütfen büyük harf yeteneklerini kullanmayın. Bu sadece okunabilirlik içindir.