如何挂钩到Wordpress登录系统以编程方式停止某些用户?

nut*_*ler 9 wordpress login

我正在开发基于Wordpress的门户网站,该门户网站集成了定制的电子商务.电子商务也是一个"控制面板":所有角色都设置在那里.有些用户被录制但是"不活跃"; 他们应该无法登录Wordpress.出于这个原因,我需要挂钩到Wordpress登录系统.

如果用户是"bad_james",即使他拥有有效的WP登录和PWD,他也无法登录.WP管理面板不提供阻止用户的标志.

有没有办法实现登录过滤器?

干杯,
戴维德

mja*_*gda 9

您可以重载该wp_authenticate函数(请参阅此处代码中的函数:http://core.trac.wordpress.org/browser/trunk/wp-includes/pluggable.php)并返回WP_error如果您不想允许用户登录.

或者更好的是,authenticate如果您不希望用户登录,请使用过滤器并返回null,例如

add_filter('authenticate', 'check_login', 10, 3);
function check_login($user, $username, $password) {
    $user = get_userdatabylogin($username); 

    if( /* check to see if user is allowed */ ) {
        return null;
    }
    return $user;
}
Run Code Online (Sandbox Code Playgroud)

  • 为了使过滤器工作,我不得不将优先级从10更改为40. WordPress核心有一些过滤器用于验证,优先级为20和30.将我们的优先级设置为40可确保我们的过滤器最后运行. (7认同)

joe*_*oel 9

mjangda回答有一些问题所以我发布了一个适用于WordPress 3.2的版本

主要问题在于return语句.他应该返回一个WP_User对象.另一个问题是优先级不够高.

add_filter('authenticate', 'check_login', 100, 3);
function check_login($user, $username, $password) {
    // this filter is called on the log in page
    // make sure we have a username before we move forward
    if (!empty($username)) {
        $user_data = $user->data;

        if (/* check to see if user is allowed */) {
          // stop login
          return null;
        }
        else {
            return $user;
        }
    }

    return $user;
}
Run Code Online (Sandbox Code Playgroud)


mar*_*dge 0

可能是一个可以借用和实现的想法或代码:WordPress \xe2\x80\xba 外部数据库身份验证 \xc2\xab WordPress 插件

\n