기본 WP_User 클래스가 여러 역할을 지원하기 때문에 여러 역할이 없기 때문에 오랫동안 자극을 받았습니다. 대체 소프트웨어 솔루션을 찾는 것도 고려했습니다. @lpryor-게시물을 읽은 후 직접 구현하도록 동기를 부여했습니다.
사용자를 위해 별도의 플러그인을 만들기에는 너무 게으 르기 때문에 users.php 파일을 해킹해야했지만 놀랍게도 짧은 줄이 필요했습니다. 분명히 이것이 잘못된 방법입니다. 향후에 충분한 동기가 있다면 올바르게 시도 할 수 있습니다.
최신 버전의 Wordpress (필수)로 업그레이드하지 않아도되는 경우 아래 코드 조각으로 여러 역할을 구현할 수 있습니다. 저는 워드 프레스 전문가가 아닙니다. 방금 관련 파일을 열고 내가하고있는 일의 전체 의미를 이해하려고 시도하지 않고 변경했습니다. 코드는 나에게 합리적으로 보이지만 내 인생에서 그것을 신뢰하지는 않을 것입니다.
(3.2를 사용하고 있으므로 줄 번호가 다를 수 있습니다) class-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;
}
*/
83 행에서 set_role을 add_role로 바꾸십시오.
$user->add_role($_REQUEST['new_role']);
92 행에 다음을 추가하십시오 (이것은 승격 조치에서 약간 편집 된 사본 및 붙여 넣기입니다. promote_user 기능이 역할을 제거하기에 적합한 지 확인하지 않았습니다).
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;