वर्तमान में मैं जिस प्लगइन पर काम कर रहा हूं, उसके लिए मैं प्रति रोल बेस पर प्लगइन सेटिंग्स (यानी, व्यवस्थापक मेनू पृष्ठों के अनुसार) तक पहुंच को प्रतिबंधित / प्रतिबंधित करना चाहता था ।
इसलिए, मैं करने के लिए किया था एक नया प्लगइन विशेष जोड़ने 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');
}
}
}
}
नोट: कृपया ऊपरी केस क्षमताओं का उपयोग न करें। यह सिर्फ पठनीयता के लिए है।