उत्परिवर्ती भूमिकाओं की कमी ने मुझे लंबे समय तक परेशान किया है क्योंकि अंतर्निहित WP_User वर्ग कई भूमिकाओं का समर्थन करता है। मैं भी एक वैकल्पिक सॉफ्टवेयर समाधान की तलाश पर विचार किया है। @lpryor - आपके पोस्ट को पढ़ने के बाद, मुझे इसे स्वयं लागू करने के लिए फिर से प्रेरित किया गया।
हालांकि यह करने के लिए मुझे आश्चर्यजनक रूप से कम संख्या में लाइनें लगीं, क्योंकि मुझे उपयोगकर्ताओं को हैक करना पड़ा है। क्योंकि मेरे लिए यह करने के लिए एक अलग प्लगइन बनाने के लिए मैं बहुत आलसी था। स्पष्ट रूप से ऐसा करने का यह गलत तरीका है कि अगर मैं भविष्य में पर्याप्त प्रेरित हूं, तो मैं इसे ठीक से करने की कोशिश कर सकता हूं।
यदि आपको Wordpress के नवीनतम संस्करण में अपग्रेड करने में सक्षम होने के बारे में परवाह नहीं है (जो आपको चाहिए) - आप नीचे दिए गए कोड स्निपेट्स के साथ कई भूमिकाएं लागू कर सकते हैं। कृपया ध्यान रखें कि मैं एक शब्द विशेषज्ञ नहीं हूं। मैंने केवल प्रासंगिक फाइलें खोलीं और जो कुछ मैं कर रहा था उसके पूर्ण प्रभाव को समझने की कोशिश किए बिना बदलाव किए। कोड मुझे उचित लगता है, लेकिन मैं अपने जीवन के साथ इस पर भरोसा नहीं करता।
(मैं 3.2 का उपयोग कर रहा हूं ताकि आपकी लाइन संख्या अलग-अलग हो सके) कक्षा- wp-users-list-table.php में लाइन 150 से पहले कुछ इस तरह जोड़ें:
<div class="alignleft actions">
<label class="screen-reader-text" for="remove_role"><?php _e( 'Remove role …' ) ?></label>
<select name="remove_role" id="remove_role">
<option value=''><?php _e( 'Remove role …' ) ?></option>
<?php wp_dropdown_roles(); ?>
</select>
<?php submit_button( __( 'Remove' ), 'secondary', 'changeit', false ); ?>
</div>
तब कुछ बदलने के लिए current_account फ़ंक्शन बदलें
function current_action() {
if ( isset($_REQUEST['changeit']) ) {
if ( !empty($_REQUEST['new_role']) )
return 'promote';
elseif ( !empty($_REQUEST['remove_role']) )
return 'remove_role';
}
return parent::current_action();
}
अब users.php में लाइनें 71-76 पर टिप्पणी करें
/*
if ( $id == $current_user->ID && !$wp_roles->role_objects[$_REQUEST['new_role']]->has_cap('promote_users') ) {
$update = 'err_admin_role';
continue;
}
*/
Add_role के साथ set_role को 83 की पंक्ति में बदलें
$user->add_role($_REQUEST['new_role']);
92 पंक्ति में निम्नलिखित जोड़ें (यह प्रचार कार्रवाई से केवल एक हल्की संपादित प्रतिलिपि और पेस्ट है - मैंने यह सुनिश्चित करने के लिए जांच नहीं की है कि रोल्स निकालने के लिए प्रमोटर_सुधार क्षमता उपयुक्त है)
case 'remove_role':
check_admin_referer('bulk-users');
if ( ! current_user_can( 'promote_users' ) )
wp_die( __( 'You can’t edit that user.' ) );
if ( empty($_REQUEST['users']) ) {
wp_redirect($redirect);
exit();
}
$editable_roles = get_editable_roles();
if ( empty( $editable_roles[$_REQUEST['remove_role']] ) )
wp_die(__('You can’t remove that role'));
$userids = $_REQUEST['users'];
$update = 'remove_role';
foreach ( $userids as $id ) {
$id = (int) $id;
if ( ! current_user_can('promote_user', $id) )
wp_die(__('You can’t edit that user.'));
// The new role of the current user must also have promote_users caps
// Need to think this through
/*
if ( $id == $current_user->ID && !$wp_roles->role_objects[$_REQUEST['new_role']]->has_cap('promote_users') ) {
$update = 'err_admin_role';
continue;
}
*/
// If the user doesn't already belong to the blog, bail.
if ( is_multisite() && !is_user_member_of_blog( $id ) )
wp_die(__('Cheatin’ uh?'));
$user = new WP_User($id);
$user->remove_role($_REQUEST['remove_role']);
}
wp_redirect(add_query_arg('update', $update, $redirect));
exit();
370 पर पंक्ति निम्नलिखित जोड़ते हैं
case 'remove_role':
$messages[] = '<div id="message" class="updated"><p>' . __('Removed role.') . '</p></div>';
break;