Bagaimana untuk mengharamkan pengguna WordPress
Saya telah diminta beberapa hari yang lalu untuk mencipta sistem yang akan mengharamkan pengguna WordPress daripada memasang. Jadi saya mencipta pemalam mudah dan saya ingin berkongsi dengan anda asas pemalam ini. Dalam tutorial ini kami akan meliputi penapis WordPress, tindakan, pengurusan lajur pengguna dan beberapa perkara yang lebih hebat.
Langkah 1: Cipta Plugin
Sekali lagi, di sini ia sangat rumit, anda hanya perlu membuat folder baharu dengan “wp-content/plugins” yang dipanggil “ban-users”. Dalam folder ini, buat fail baharu yang dipanggil "ban-users.php", bukanya dan tampal kod 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: Tambah Kotak Semak Pada Halaman Profil Pengguna
Perkara pertama yang perlu kita lakukan ialah menambah kotak pilihan pada setiap halaman edisi profil pengguna. Apabila anda akan menandai kotak pilihan ini, ia akan menyimpan pilihan meta pengguna yang akan menunjukkan bahawa pengguna tidak dibenarkan lagi untuk log masuk ke tapak web anda.
Inilah kodnya:
/**
* 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' );Kod ini hanya mencipta panggilan ke fungsi yang perlu kita buat sekarang. Fungsi ini akan menambah kotak semak pada 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 kini perlu mempunyai fungsi yang akan menyimpan ke dalam pangkalan data nilai kotak semak:
/**
* 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 baharu ini menggunakan dua fungsi lain: rc_ban_users() dan rc_unban_users(). Nama mereka cukup jelas, yang pertama akan menyimpan dalam pangkalan data fakta bahawa pengguna diharamkan, yang kedua akan membuka kunci pengguna.
Langkah 3: Larang Pengguna
Kini tiba masanya untuk mencipta fungsi rc_ban_users(). Dalam fungsi ini kita perlu menyemak sama ada nilai telah disimpan, dan jika tidak kita perlu menyimpan nilai tersebut. Itulah sebab mengapa saya memanggil fungsi yang akan saya terangkan kemudian: 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: Nyahlarang Pengguna
Fungsi berikut adalah bertentangan dengan fungsi yang baru kami buat: kami perlu memberikan keupayaan untuk "menyahlarang" 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: Adakah Pengguna Diharamkan?
Kami melihat dalam rc_ban_users() dan rc_unban_users() bahawa kami menggunakan fungsi yang dipanggil rc_is_user_banned() untuk menyemak sama ada pengguna diharamkan atau tidak. Mari menciptanya:
/**
* 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 asasnya, fungsi ini hanya mengembalikan nilai pilihan yang disimpan dalam rc_ban_users().
Pada masa ini kami mempunyai kotak pilihan baharu pada halaman edisi pengguna yang sepatutnya seperti itu:
Langkah terakhir ialah menghubungkan fungsi ke borang log masuk untuk mengelakkan pengguna yang dilarang untuk log masuk.
Langkah 5: Elakkan Pengguna Diharamkan Untuk Log Masuk
Untuk berbuat demikian kita perlu menggunakan penapis lalai WordPress yang dipanggil "wp_authenticate_user". Untuk  penapis ini, kami akan menyambungkan fungsi yang dipanggil "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 menambah penapis:
add_filter( 'wp_authenticate_user', 'rc_authenticate_user', 1 );Kami mencipta pemalam yang menambahkan kotak pilihan pada halaman edisi profil pengguna. Kami menggunakan fungsi kedua untuk menyimpan nilai pada kotak semak dan kami mencipta fungsi untuk melarang pengguna WordPress dan satu lagi untuk membuka kunci pengguna. Kami juga mencipta fungsi kecil untuk menyemak sama ada pengguna diharamkan atau tidak. Dan akhirnya kami menghubungkan fungsi ke penapis "wp_authenticate_user" menggunakan kelas lalai WordPress WP_Error.
Muat turun Kod Penuh Pada Github

