7

我在functions.php中添加了一个函数,在登录后将用户重定向到posts-new.php,它可以工作。但是,我只希望在登录的用户是贡献者的情况下发生这种情况。所以我添加了以下内容:

/** Redirect after login */
    function mysite_login_redirect(){
        if ( current_user_can( 'manage_options' ) ) {
           return 'http://mysite.com/wp-admin/index.php';}
        else {
           return 'http://mysite.com/wp-admin/post-new.php';}
    }
add_action( 'login_redirect', 'mysite_login_redirect');

在这种状态下,贡献者和管理员都被重定向到 post-new.php。为了测试它,我修改了函数,以便重定向没有该功能的用户:

if ( !current_user_can( 'ma ...

当我修改函数时,贡献者和管理员都被重定向到 index.php。

所以该功能似乎有效,但这对我来说意味着它没有看到管理员的“manage_options”功能。我尝试了几种管理员独有的功能,结果相同。很奇怪吧?

我应该说我正在使用用户角色编辑器插件,但我禁用了它并以相同的结果测试了这些功能。

我还在使用 Active Directory 集成和管理菜单编辑器。

4

2 回答 2

21

尝试这个:

if( current_user_can( 'administrator' ) ){} // only if administrator
if( current_user_can( 'editor' ) ){} // only if editor
if( current_user_can( 'author' ) ){} // only if author
if( current_user_can( 'contributor' ) ){} // only if contributor
if( current_user_can( 'subscriber' ) ){} // only if subscriber

或者:

if( current_user_can( 'level_10' ) ){}
if( current_user_can( 'level_9' ) ){}
if( current_user_can( 'level_8' ) ){}
if( current_user_can( 'level_7' ) ){}
if( current_user_can( 'level_6' ) ){}
if( current_user_can( 'level_5' ) ){}
if( current_user_can( 'level_4' ) ){}
if( current_user_can( 'level_3' ) ){}
if( current_user_can( 'level_2' ) ){}
if( current_user_can( 'level_1' ) ){}
if( current_user_can( 'level_0' ) ){}
于 2012-11-15T19:09:40.547 回答
0

尝试这个:

$exclude_role = 'contributor';
        $roles = get_role( $exclude_role )->capabilities;
        foreach ( $roles as $cap ) {
            if ( current_user_can( $cap ) ) {
                ...
            }
        }
于 2019-10-21T11:35:20.150 回答