كيف تحظر مستخدم ووردبريس
الخطوة 1: إنشاء البرنامج المساعد
مرة أخرى ، الأمر معقد للغاية هنا ، كل ما عليك فعله هو إنشاء مجلد جديد مع “wp-content / plugins” يسمى “ban-users”. في هذا المجلد ، قم بإنشاء ملف جديد يسمى “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: إضافة مربع اختيار في صفحة ملف تعريف المستخدمين
أول شيء يتعين علينا القيام به هو إضافة مربع اختيار في كل صفحة إصدار ملف تعريف مستخدم. عند تحديد مربع الاختيار هذا ، سيتم تخزين خيار meta للمستخدم الذي سيشير إلى أنه لم يعد مسموحًا للمستخدم بتسجيل الدخول إلى موقع الويب الخاص بك.
ها هو الكود:
/**
* 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 ().
في الوقت الحالي لدينا مربع اختيار جديد في صفحة إصدار المستخدم يجب أن يكون كالتالي:
الخطوة الأخيرة هي ربط دالة بنموذج تسجيل الدخول لتجنب تسجيل دخول المستخدمين المحظورين.
الخطوة 5: تجنب دخول المستخدمين المحظورين
للقيام بذلك ، نحتاج إلى استخدام مرشح WordPress الافتراضي يسمى “wp_authenticate_user”. لهذا المرشح سنربط وظيفة تسمى “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_authenticate_user” باستخدام فئة WP_Error WordPress الافتراضية.