为什么管理员不工作?

时间:2016-01-28 15:25:34

标签: php wordpress

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

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

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

以下是将管理员设置为待处理的原始代码:

// 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(); 
    }
}

非常感谢任何协助。

2 个答案:

答案 0 :(得分:0)

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

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

来源:

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

答案 1 :(得分:0)

  

@ 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(); 
    }
}
  

P.S. here is a related question, gmazzap's answer has more detail