Cara melarang pengguna WordPress
Saya diminta beberapa hari yang lalu untuk membuat sistem yang akan melarang pengguna WordPress melakukan instalasi. Jadi saya membuat sebuah plugin sederhana dan saya ingin berbagi dengan Anda dasar-dasar plugin ini. Dalam tutorial ini kita akan membahas filter WordPress, tindakan, manajemen kolom pengguna, dan beberapa hal hebat lainnya.
Langkah 1: Buat Plugin
Sekali lagi, ini sangat rumit, yang harus Anda lakukan adalah membuat folder baru dengan “wp-content/plugins” yang disebut “ban-users”. Di folder ini, buat file baru bernama “ban-users.php”, buka dan tempel kode ini:
<?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
*/Langkah 2: Tambahkan Kotak Centang Di Halaman Profil Pengguna
Hal pertama yang perlu kita lakukan adalah menambahkan checkbox pada setiap halaman edisi profil pengguna. Saat Anda mencentang kotak ini, opsi meta pengguna akan disimpan yang menunjukkan bahwa pengguna tidak diizinkan lagi untuk masuk ke situs web Anda.
Ini kodenya:
/**
* 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' );Kode ini hanyalah membuat panggilan ke fungsi yang harus kita buat sekarang. Fungsi ini akan menambahkan kotak centang ke halaman profil pengguna.
/**
* 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>';
}Kita sekarang perlu memiliki fungsi yang akan menyimpan nilai kotak centang ke dalam database:
/**
* 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 );
}
}Seperti yang Anda lihat, fungsi baru ini menggunakan dua fungsi lainnya: rc_ban_users() dan rc_unban_users(). Nama mereka cukup eksplisit, yang pertama akan menyimpan dalam database fakta bahwa seorang pengguna dilarang, yang kedua akan membuka kunci pengguna.
Langkah 3: Larang Pengguna
Sekarang saatnya membuat fungsi rc_ban_users(). Dalam fungsi ini kita perlu memeriksa apakah suatu nilai sudah disimpan, dan jika belum kita perlu menyimpan nilainya. Itulah alasan mengapa saya memanggil fungsi yang akan saya jelaskan nanti: 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 );
}
}Langkah 4: Batalkan pelarangan Pengguna
Fungsi berikut adalah kebalikan dari yang baru saja kita buat: kita harus memberikan kemampuan untuk “membatalkan pelarangan” pengguna:
/**
* 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 );
}
}Langkah 5: Apakah Pengguna Diblokir?
Kita melihat di rc_ban_users() dan rc_unban_users() bahwa kita menggunakan fungsi bernama rc_is_user_banned() untuk memeriksa apakah pengguna diblokir atau tidak. Mari kita buat:
/**
* 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 );
}Pada dasarnya, fungsi ini hanya mengembalikan nilai opsi yang disimpan di rc_ban_users().
Saat ini kami memiliki kotak centang baru di halaman edisi pengguna yang seharusnya seperti itu:
Langkah terakhir adalah menghubungkan suatu fungsi ke form login untuk menghindari larangan pengguna untuk login.
Langkah 5: Hindari Pengguna yang Dilarang Masuk
Untuk melakukannya kita perlu menggunakan filter default WordPress yang disebut “wp_authenticate_user”. Ke  filter ini kita akan menghubungkan fungsi yang disebut “rc_authenticate_user()”. Fungsi ini akan menggunakan kelas 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;
}Sekarang, kita hanya perlu menambahkan filter:
add_filter( 'wp_authenticate_user', 'rc_authenticate_user', 1 );Kami membuat plugin yang menambahkan kotak centang ke halaman edisi profil pengguna. Kami menggunakan fungsi kedua untuk menyimpan nilai pada kotak centang dan kami membuat fungsi untuk melarang pengguna WordPress dan fungsi lainnya untuk membuka kunci pengguna. Kami juga membuat fungsi kecil untuk memeriksa apakah pengguna diblokir atau tidak. Dan kami akhirnya menghubungkan fungsi ke filter “wp_authenticate_user” menggunakan kelas default WP_Error WordPress.
Unduh Kode Lengkap Di Github

