Temel WP_User sınıfı birden çok rolü desteklediğinden, birden fazla rolün olmaması beni uzun süre rahatsız etti. Alternatif bir yazılım çözümü aramayı bile düşündüm. @lpryor - yazınızı okuduktan sonra, kendim uygulamak için yeniden motive oldum.
Benim için ayrı bir eklenti oluşturmak için çok tembel olduğum için users.php dosyasını kesmek zorunda kalmama rağmen, satırları şaşırtıcı derecede kısa sürdü. Açıkçası bu yapmanın yanlış yolu bu yüzden gelecekte yeterince motive olursam, doğru şekilde yapmaya çalışabilirim.
Wordpress'in en son sürümüne yükseltmeyi umursamıyorsanız (yapmanız gerekir) - aşağıdaki kod parçacıklarıyla birden fazla rol uygulayabilirsiniz. Wordpress uzmanı olmadığımı lütfen unutmayın. İlgili dosyaları açtım ve yaptığımın tam sonuçlarını anlamaya çalışmadan değişiklikleri yaptım. Kod benim için makul görünüyor ama hayatım boyunca buna güvenmem.
(3.2 kullanıyorum, böylece satır numaralarınız değişebilir) class-wp-users-list-table.php satır 150'den hemen önce aşağıdaki gibi bazı ekleyin:
<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>
sonra current_account işlevini aşağıdaki gibi görünecek şekilde değiştirin
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();
}
Şimdi users.php Yorum satırları 71-76
/*
if ( $id == $current_user->ID && !$wp_roles->role_objects[$_REQUEST['new_role']]->has_cap('promote_users') ) {
$update = 'err_admin_role';
continue;
}
*/
83. satırdaki set_role öğesini add_role ile değiştirin
$user->add_role($_REQUEST['new_role']);
Satır 92'de aşağıdakileri ekleyin (Bu, yalnızca tanıtım işleminden hafifçe düzenlenmiş bir kopyala yapıştırdır - promers_user özelliğinin rolleri kaldırmak için uygun olup olmadığını kontrol etmedim)
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 satırında aşağıdakileri ekleyin
case 'remove_role':
$messages[] = '<div id="message" class="updated"><p>' . __('Removed role.') . '</p></div>';
break;