অন্তর্নিহিত WP_User শ্রেণি একাধিক ভূমিকা সমর্থন করার পরে একাধিকবার একাধিক ভূমিকার অভাব আমাকে বিরক্ত করেছিল। আমি এমনকি বিকল্প সফ্টওয়্যার সমাধান খুঁজছেন বিবেচনা করেছি। @ প্ল্রিয়ার - আপনার পোস্টটি পড়ার পরে, আমি নিজেই এটি বাস্তবায়নের জন্য উত্সাহিত হয়েছিলাম।
এটি করার জন্য আমার আশ্চর্যজনকভাবে সংক্ষিপ্ত সংখ্যক লাইন লেগেছিল যদিও আমার কাছে এটি করার জন্য একটি পৃথক প্লাগইন তৈরি করতে খুব অলস হওয়ার কারণে আমি ইউজার্স.এফপি ফাইলটি হ্যাক করতে হয়েছিল। স্পষ্টতই এটি করার এটি ভুল উপায় তাই ভবিষ্যতে যদি আমি যথেষ্ট প্রেরণা পাই তবে আমি এটি সঠিকভাবে করার চেষ্টা করতে পারি।
আপনি যদি ওয়ার্ডপ্রেসের সর্বশেষ সংস্করণে (যা আপনার হওয়া উচিত) আপগ্রেড করতে সক্ষম না হয়ে থাকেন - আপনি নীচের কোড স্নিপেটের সাহায্যে একাধিক ভূমিকা প্রয়োগ করতে পারেন। দয়া করে মনে রাখবেন যে আমি কোনও ওয়ার্ডপ্রেস বিশেষজ্ঞ নই। আমি কেবল প্রাসঙ্গিক ফাইলগুলি খুলেছি এবং আমি যা করছি তার পুরো প্রভাবগুলি বোঝার চেষ্টা না করেই পরিবর্তনগুলি করেছি। কোডটি আমার কাছে যুক্তিসঙ্গত বলে মনে হচ্ছে তবে আমি এটি আমার জীবন দিয়ে বিশ্বাস করব না।
(আমি ৩.২ ব্যবহার করছি যাতে আপনার লাইন নম্বরগুলি পৃথক হতে পারে) শ্রেণিতে- 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>
তারপরে এই জাতীয় কিছু দেখতে কারেন্ট_একউন্ট অ্যাকাউন্ট ফাংশনটি পরিবর্তন করুন
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();
}
এখন ব্যবহারকারী.এফপি লাইনে 71১-7676 মন্তব্য করুন
/*
if ( $id == $current_user->ID && !$wp_roles->role_objects[$_REQUEST['new_role']]->has_cap('promote_users') ) {
$update = 'err_admin_role';
continue;
}
*/
_৩ লাইনে সেট_রেলটি অ্যাড_রোলের সাথে প্রতিস্থাপন করুন
$user->add_role($_REQUEST['new_role']);
লাইনের ৯২ এ নিম্নলিখিতটি যুক্ত করুন (এটি কেবল প্রচারিত ক্রিয়াকলাপ থেকে হালকা সম্পাদিত অনুলিপি এবং পেস্ট করুন - আমি প্রচার-ব্যবহারকারীর ভূমিকা মুছে ফেলার জন্য উপযুক্ত কিনা তা নিশ্চিত করার জন্য পরীক্ষা করে দেখিনি)
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;