如何禁止WordPress用户

几天前有人要求我创建一个系统,禁止安装WordPress用户。因此,我创建了一个简单的插件,并希望与您分享该插件的基础知识。在本教程中,我们将介绍WordPress过滤器,操作,用户列管理以及其他一些很棒的东西.


步骤1:建立外挂程式

再次,这很复杂,您要做的就是创建一个名为“ ban-users”的带有“ wp-content / plugins”的新文件夹。在此文件夹中,创建一个名为“ ban-users.php”的新文件,将其打开并粘贴以下代码:

第2步:在用户个人资料页面上添加复选框

我们要做的第一件事是在每个用户个人资料版本页面上添加一个复选框。当您选中此复选框时,它将存储一个用户元选项,该选项指示不再允许该用户登录您的网站.

这是代码:

/ **
*管理员初始化
*
* @公开访问
* @自1.0起
* @返回无效
* /
函数rc_admin_init(){

//编辑用户个人资料
add_action('edit_user_profile','rc_edit_user_profile');
add_action('edit_user_profile_update','rc_edit_user_profile_update');

}
add_action('admin_init','rc_admin_init');

这段代码只是创建对我们现在必须创建的函数的调用。此功能将在用户个人资料页面中添加一个复选框.

/ **
*将自定义复选框添加到用户版本页面
*
* @公开访问
* @自1.0起
* @返回无效
* /
函数rc_edit_user_profile(){
如果(!current_user_can('edit_users')){
返回;
}

全局$ user_id;

//用户无法禁用自己
$ current_user = wp_get_current_user();
$ current_user_id = $ current_user-> ID;
如果($ current_user_id == $ user_id){
返回;
}

//检查是否启用
$ checked =已检查(get_user_option('rc_banned',$ user_id,false));

//显示复选框
回声
禁止用户
'; }

现在,我们需要具有将复选框的值保存到数据库中的功能:

/ **
*保存自定义复选框
*
* @公开访问
* @自1.0起
* @返回无效
* /
函数rc_edit_user_profile_update(){

如果(!current_user_can('edit_users')){
返回;
}

全局$ user_id;

//用户无法禁用自己
$ current_user = wp_get_current_user();
$ current_user_id = $ current_user-> ID;
如果($ current_user_id == $ user_id){
返回;
}

//锁定
if(isset($ _POST ['rc_ban'])&& $ _POST ['rc_ban'] ='on'){
rc_ban_user($ user_id);
} else {//解锁
rc_unban_user($ user_id);
}

}

如您所见,此新函数使用其他两个函数:rc_ban_users()和rc_unban_users()。它们的名称非常明确,第一个将用户禁令这一事实存储在数据库中,第二个将解锁用户.

步骤3:禁止使用者

现在是时候创建rc_ban_users()函数了。在此功能中,我们需要检查是否已存储值,如果尚未存储,则需要存储该值。这就是为什么我调用稍后将描述的函数的原因:rc_is_user_banned():

/ **
*禁止用户
*
* @公开访问
* @自1.0起
* @返回无效
* /
函数rc_ban_user($ user_id){

$ old_status = rc_is_user_banned($ user_id);

// 更新状态
如果(!$ old_status){
update_user_option($ user_id,'rc_banned',true,false);
}
}

第4步:取消禁止用户

以下功能与我们刚创建的功能相反:我们必须具有“取消禁止”用户的功能:

/ **
*禁止用户
*
* @公开访问
* @自1.0起
* @返回无效
* /
函数rc_unban_user($ user_id){

$ old_status = rc_is_user_banned($ user_id);

// 更新状态
如果($ old_status){
update_user_option($ user_id,'rc_banned',false,false);
}
}

步骤5:是否被用户禁止?

我们在rc_ban_users()和rc_unban_users()中看到,我们使用了一个名为rc_is_user_banned()的函数来检查用户是否被禁止。创建它:

/ **
*检查用户是否已被禁止
*
* @公开访问
* @自1.0起
* @返回无效
* /
函数rc_is_user_banned($ user_id){
返回get_user_option('rc_banned',$ user_id,false);
}

基本上,此函数仅返回保存在rc_ban_users()中的选项的值.

目前,我们在用户版本页面上有一个新复选框,该复选框应为:

ban_users_1

最后一步是将函数挂钩到登录表单,以避免被禁止的用户登录.

步骤5:避免被禁止的用户登录

为此,我们需要使用一个名为“ wp_authenticate_user”的WordPress默认过滤器。在此过滤器中,我们将挂接一个名为“ rc_authenticate_user()”的函数。此功能将使用 WP_Error类.

/ **
*在登录过程中检查用户是否被锁定
*
* @公开访问
* @自1.0起
* @返回无效
* /
函数rc_authenticate_user($ user){

如果(is_wp_error($ user)){
返回$ user;
}

//如果用户帐户被禁止,则返回错误
$ banned = get_user_option('rc_banned',$ user-> ID,false);
如果($被禁止){
返回新的WP_Error('rc_banned',__('错误:此用户帐户已禁用。','rc'));
}

返回$ user;
}

现在,我们只需要添加过滤器:

add_filter('wp_authenticate_user','rc_authenticate_user',1);

结论

我们创建了一个插件,该插件在用户个人资料版本页面上添加了一个复选框。我们使用了第二个功能将值存储在复选框上,并创建了一个功能来禁止WordPress用户,另一个功能则用于解锁用户。我们还创建了一个小功能来检查用户是否被禁止。最后,我们使用WP_Error WordPress默认类将函数连接到“ wp_authenticate_user”过滤器.

如果您喜欢本教程,则将喜欢该插件的高级版本:Users Access Manager.

在Github上下载完整代码

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map