17713433920 info@mac163.com
如何禁止WordPress用户
如何禁止WordPress用户

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

步骤1:建立外挂程式

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

<?php
/*
Plugin Name: Ban Users
Plugin URI: http://www.remicorson.com
Description: Allows you to ban users
Author: Remi Corson
Version: 1.0
Author URI: http://www.remicorson.com
*/

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

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

这是代码:

/**
 * Admin init
 *
 * @access      public
 * @since       1.0 
 * @return      void
*/
function rc_admin_init(){
    
	// Edit user profile
	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' );

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

/**
 * Adds custom checkbox to user edition page
 *
 * @access      public
 * @since       1.0 
 * @return      void
*/
function rc_edit_user_profile() {
	if ( !current_user_can( 'edit_users' ) ) {
		return;
	}
	
	global $user_id;
	
	// User cannot disable itself
	$current_user = wp_get_current_user();
	$current_user_id = $current_user->ID;
	if ( $current_user_id == $user_id ) {
		return;
	}

	// Check if enabled
	$checked = checked( get_user_option( 'rc_banned', $user_id, false ) );

	// Display checkbox
	echo '<table class="form-table">
	<tr>
		<th scope="row">Ban User</th>
		<td>
		<label for="rc_ban">
			<input name="rc_ban" type="checkbox" id="rc_ban" '. $checked .' />Ban this user</label>
		</td>
	</tr>
	</table>';
}

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

/**
 * Save custom checkbox
 *
 * @access      public
 * @since       1.0 
 * @return      void
*/
function rc_edit_user_profile_update() {
			
	if ( !current_user_can( 'edit_users' ) ) {
		return;
	}
	
	global $user_id;
	
	// User cannot disable itself
	$current_user    = wp_get_current_user();
	$current_user_id = $current_user->ID;
	if ( $current_user_id == $user_id ) {
		return;
	}
	
	// Lock
	if( isset( $_POST['rc_ban'] ) && $_POST['rc_ban'] = 'on' ) {
		rc_ban_user( $user_id );
	} else { // Unlock
		rc_unban_user( $user_id );
	}
	
}

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

步骤3:禁止使用者

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

/**
 * Ban user
 *
 * @access      public
 * @since       1.0 
 * @return      void
*/
function rc_ban_user( $user_id ) {
	
	$old_status = rc_is_user_banned( $user_id );
	
	// Update status
	if ( !$old_status ) {
		update_user_option( $user_id, 'rc_banned', true, false );
	}
}

第4步:取消禁止用户

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

/**
 * Un-ban user
 *
 * @access      public
 * @since       1.0 
 * @return      void
*/
function rc_unban_user( $user_id ) {

	$old_status = rc_is_user_banned( $user_id );
	
	// Update status
	if ( $old_status ) {
		update_user_option( $user_id, 'rc_banned', false, false );
	}
}

步骤5:是否禁止用户?

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

/**
 * Checks if a user is already banned
 *
 * @access      public
 * @since       1.0 
 * @return      void
*/
function rc_is_user_banned( $user_id ) {
	return get_user_option( 'rc_banned', $user_id, false );
}

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

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

ban_users

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

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

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

/**
 * Check if user is locked while login process
 *
 * @access      public
 * @since       1.0 
 * @return      void
*/
function rc_authenticate_user( $user ) {

	if ( is_wp_error( $user ) ) {
		return $user;
	}
	
	// Return error if user account is banned
	$banned = get_user_option( 'rc_banned', $user->ID, false );
	if ( $banned ) {
		return new WP_Error( 'rc_banned', __('<strong>ERROR</strong>: This user account is disabled.', 'rc') );
	}
	
	return $user;
}

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

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

结论

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

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

在GITHUB上下载完整代码


微信二维码

微信扫描二维码联系我们!
我们在微信上24小时期待你的声音
提供外贸路由器设备产品,轻松翻墙,解答:WP主题推荐,WP网站建设,Google SEO,百度SEO,专业服务器环境搭建等!


需要提供WordPress主题/插件的汉化服务可以随时联系我们!另外成品WordPress网站以及半成品WordPress网站建设,海外Google SEO优化托管服务,百度SEO优化托管服务,Centos/Debian服务器WP专用环境搭建,WP缓存服务器搭建,我们都是你的首选,拥有多年WP开源程序服务经验,我们一直在坚持客户体验,没有最好,只有更好!
回到顶部