چگونه یک کاربر وردپرس را ممنوع کنیم

چگونه یک کاربر وردپرس را ممنوع کنیم

چند روز پیش از من خواسته شد سیستمی ایجاد کنم که کاربر وردپرس را از نصب منع کند. بنابراین من یک افزونه ساده ایجاد کردم و می خواستم اصول اولیه این افزونه را با شما به اشتراک بگذارم. در این آموزش ما فیلترهای وردپرس، اقدامات، مدیریت ستون های کاربران و برخی چیزهای عالی دیگر را پوشش خواهیم داد.

مرحله 1: ایجاد افزونه

یک بار دیگر، اینجا بسیار پیچیده است، تنها کاری که باید انجام دهید این است که یک پوشه جدید با “wp-content/plugins” به نام “ban-users” ایجاد کنید. در این پوشه، یک فایل جدید به نام “ban-users.php” ایجاد کنید، آن را باز کنید و این کد را بچسبانید:

مرحله 2: افزودن یک چک باکس در صفحه نمایه کاربران

اولین کاری که باید انجام دهیم این است که در هر صفحه ویرایش نمایه کاربر یک چک باکس اضافه کنیم. هنگامی که این کادر را علامت بزنید، یک گزینه متا کاربر ذخیره می شود که نشان می دهد کاربر دیگر اجازه ورود به وب سایت شما را ندارد.

این کد است:

/**
 * Admin init
 *
 * @access عمومی
 * @از 1.0 
 * @return void
*/
تابع 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' );

این کد به سادگی یک فراخوانی برای تابعی ایجاد می کند که اکنون باید آن را ایجاد کنیم. این تابع یک چک باکس به صفحه نمایه کاربران اضافه می کند.

/**
 * چک باکس سفارشی را به صفحه نسخه کاربر اضافه می کند
 *
 * @access عمومی
 * @از 1.0 
 * @return void
*/
تابع rc_edit_user_profile() {
	if ( !current_user_can( 'edit_users' ) ) {
		برگشت؛
	}
	
	جهانی $user_id;
	
	// کاربر نمی تواند خود را غیرفعال کند
	$current_user = wp_get_current_user();
	$current_user_id = $current_user->ID;
	if ( $current_user_id == $user_id ) {
		برگشت؛
	}

	// فعال بودن را بررسی کنید
	$checked = checked( get_user_option( 'rc_banned', $user_id, false ) );

	// چک باکس نمایش داده شود
	echo '
ممنوع کردن کاربر
'; }

اکنون باید تابعی را داشته باشیم که مقدار چک باکس را در پایگاه داده ذخیره می کند:

/**
 * جعبه چک سفارشی را ذخیره کنید
 *
 * @access عمومی
 * @از 1.0 
 * @return void
*/
تابع rc_edit_user_profile_update() {
			
	if ( !current_user_can( 'edit_users' ) ) {
		برگشت؛
	}
	
	جهانی $user_id;
	
	// کاربر نمی تواند خود را غیرفعال کند
	$current_user = wp_get_current_user();
	$current_user_id = $current_user->ID;
	if ( $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():

/**
 * کاربر را ممنوع کنید
 *
 * @access عمومی
 * @از 1.0 
 * @return void
*/
تابع rc_ban_user ($user_id ) {
	
	$old_status = rc_is_user_banned($user_id );
	
	// وضعیت به روز رسانی
	if ( !$old_status ) {
		update_user_option($user_id، 'rc_banned'، true، false );
	}
}

مرحله 4: لغو ممنوعیت کاربران

عملکرد زیر برعکس تابعی است که به تازگی ایجاد کردیم: ما باید این قابلیت را به کاربران “بدون ممنوعیت” بدهیم:

/**
 * لغو ممنوعیت کاربر
 *
 * @access عمومی
 * @از 1.0 
 * @return void
*/
تابع rc_unban_user($user_id) {

	$old_status = rc_is_user_banned($user_id );
	
	// وضعیت به روز رسانی
	if ($old_status ) {
		update_user_option($user_id، 'rc_banned'، false، false );
	}
}

مرحله 5: آیا کاربر ممنوع است؟

ما در rc_ban_users() و rc_unban_users() دیدیم که از تابعی به نام rc_is_user_banned() برای بررسی اینکه آیا کاربر ممنوع شده است یا خیر استفاده می کنیم. بیایید آن را ایجاد کنیم:

/**
 * بررسی می کند که آیا کاربر قبلاً ممنوع شده است
 *
 * @access عمومی
 * @از 1.0 
 * @return void
*/
تابع rc_is_user_banned($user_id) {
	return get_user_option('rc_banned', $user_id, false );
}

در اصل، این تابع به سادگی مقدار گزینه ذخیره شده در rc_ban_users() را برمی گرداند.

در حال حاضر ما یک چک باکس جدید در صفحه نسخه کاربر داریم که باید این مورد را دوست داشته باشد:

آخرین مرحله این است که یک تابع را به فرم ورود قلاب کنید تا از ورود کاربران ممنوع شده جلوگیری شود.

مرحله 5: از ورود کاربران ممنوعه اجتناب کنید

برای این کار باید از یک فیلتر پیش فرض وردپرس به نام “wp_authenticate_user” استفاده کنیم. ما تابعی به نام «rc_authenticate_user()» را به این فیلتر متصل می‌کنیم. این تابع از کلاس WP_Error استفاده می کند.

/**
 * بررسی کنید که آیا کاربر هنگام ورود به سیستم قفل شده است یا خیر
 *
 * @access عمومی
 * @از 1.0 
 * @return void
*/
تابع rc_authenticate_user( $user ) {

	if ( is_wp_error( $user ) ) {
		بازگشت $user;
	}
	
	// در صورت مسدود شدن حساب کاربری، خطا را برگردانید
	$banned = get_user_option( 'rc_banned', $user->ID, false );
	if ( $ممنوع ) {
		return new WP_Error( 'rc_banned', __('ERROR: این حساب کاربری غیرفعال است.', 'rc') );
	}
	
	بازگشت $user;
}

اکنون، فقط باید فیلتر را اضافه کنیم:

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

ما افزونه ای ایجاد کردیم که یک چک باکس به صفحه ویرایش نمایه کاربر اضافه می کند. ما از یک تابع دوم برای ذخیره مقدار در چک باکس استفاده کردیم و یک تابع برای ممنوع کردن یک کاربر وردپرس و دیگری برای باز کردن قفل کاربر ایجاد کردیم. ما همچنین یک تابع کوچک برای بررسی اینکه آیا یک کاربر ممنوع است یا نه ایجاد کردیم. و در نهایت یک تابع را با استفاده از کلاس پیش‌فرض WP_Error وردپرس به فیلتر «wp_authenticate_user» متصل کردیم.

دانلود کد کامل در Github

خروج از نسخه موبایل