Kurangnya peran ganda telah membuat saya kesal sejak lama karena kelas WP_User yang mendasarinya mendukung banyak peran. Saya bahkan mempertimbangkan untuk mencari solusi perangkat lunak alternatif. @ lpryor - setelah membaca posting Anda, saya termotivasi untuk mengimplementasikannya sendiri.
Secara mengejutkan diperlukan beberapa baris untuk dilakukan walaupun saya harus meretas file users.php karena saya terlalu malas untuk membuat plugin terpisah untuk melakukannya untuk saya. Jelas ini adalah cara yang salah untuk melakukannya sehingga jika saya cukup termotivasi di masa depan, saya dapat mencoba melakukannya dengan benar.
Jika Anda tidak peduli untuk dapat meningkatkan ke versi terbaru dari Wordpress (yang seharusnya) - Anda dapat menerapkan beberapa peran dengan potongan kode di bawah ini. Harap diingat bahwa saya bukan ahli wordpress. Saya baru saja membuka file yang relevan dan membuat perubahan tanpa mencoba memahami implikasi penuh dari apa yang saya lakukan. Kode itu tampaknya masuk akal bagi saya tetapi saya tidak akan mempercayainya dengan hidup saya.
(Saya menggunakan 3,2 sehingga nomor baris Anda dapat bervariasi) Di kelas-wp-users-list-table.php sebelum baris 150 tambahkan beberapa seperti berikut:
<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>
kemudian ubah fungsi current_account agar terlihat seperti ini
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();
}
Sekarang di users.php Komentari baris 71-76
/*
if ( $id == $current_user->ID && !$wp_roles->role_objects[$_REQUEST['new_role']]->has_cap('promote_users') ) {
$update = 'err_admin_role';
continue;
}
*/
Ganti set_role di baris 83 dengan add_role
$user->add_role($_REQUEST['new_role']);
Pada baris 92 tambahkan yang berikut ini (Ini hanyalah copy & paste yang diedit ringan dari tindakan promosi - Saya belum memeriksa untuk memastikan bahwa kemampuan promot_user sesuai untuk menghapus peran)
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();
Pada baris 370 tambahkan berikut ini
case 'remove_role':
$messages[] = '<div id="message" class="updated"><p>' . __('Removed role.') . '</p></div>';
break;