由于底层WP\\u用户类支持多个角色,长期以来,缺少多个角色一直困扰着我。我甚至考虑过寻找另一种软件解决方案@lpryor——读了你的帖子后,我又有了实现它的动力。
虽然我不得不对用户进行黑客攻击,但却花费了惊人的短行数。php文件,因为我太懒了,无法创建单独的插件来为我完成它。很明显,这样做是错误的,如果我将来有足够的动力,我可能会尝试正确地去做。
如果您不想升级到Wordpress的最新版本(您应该升级),那么可以使用下面的代码片段实现多个角色。请记住,我不是wordpress专家。我只是打开了相关文件并进行了更改,而没有试图理解我所做的一切的全部含义。这个准则对我来说似乎是合理的,但我一生都不会相信它。
(我使用的是3.2,所以您的行号可能会有所不同)在类别wp用户列表中。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\\u 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();
}
现在在用户中。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\\u角色替换为add\\u角色
$user->add_role($_REQUEST[\'new_role\']);
在第92行添加以下内容(这只是升级操作中经过轻微编辑的复制和粘贴-我没有检查以确保promote\\u用户功能适合删除角色)
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;