为什么如果管理员不起作用


Why is if is admin not working?

前几天我从Wordpress Ultimate Members插件中编辑了一些代码,如果配置文件由用户编辑,则将用户配置文件更改为挂起。

但是,我注意到该代码还将管理员帐户也设置为挂起。 我不想要这个,所以我一直在尝试使用 if/else 语句在脚本运行之前查询用户是否是管理员。

我知道这对于 PHP 专家来说很简单,但我已经尝试了很多变体,并且管理员仍被设置为待批准。

以下是将 admin 设置为挂起的原始代码:

// Set profile to under review after edits
add_action('um_user_edit_profile', 'um_post_edit_pending_hook', 10, 2); 
    function um_post_edit_pending_hook($user_id, $args){ 
        global $ultimatemember; 
        $ultimatemember->user->pending(); 
}

这是我试图绕过管理员的代码,它不起作用。 我不会添加我尝试过的所有变体。

add_action('um_user_edit_profile', 'um_post_edit_pending_hook', 10, 2); 
function um_post_edit_pending_hook($user_id, $args){ 
if ( is_admin() ) {
    return false;
    } else { 
        global $ultimatemember; 
        $ultimatemember->user->pending(); 
    }
}

任何协助将不胜感激。

此条件标记检查是否正在尝试显示仪表板或管理面板。它不应用作验证当前用户是否有权查看仪表板或管理面板的方法(请尝试current_user_can()):

https://codex.wordpress.org/Function_Reference/current_user_can

源:

https://codex.wordpress.org/Function_Reference/is_admin

@user45250已经很好地解释了这一点。我添加了这个答案以提供一些示例代码。

这是我之前评论中的代码。

add_action('um_user_edit_profile', 'um_post_edit_pending_hook', 10, 2); 
function um_post_edit_pending_hook($user_id, $args){ 
    if ( current_user_can('administrator') ) {
        return false;
    } else { 
        global $ultimatemember; 
        $ultimatemember->user->pending(); 
    }
}

附言这里有一个相关的问题,gmazzap的回答有更详细的信息。