Bir WordPress kullanıcısı nasıl yasaklanır
Birkaç gün önce benden bir WordPress kullanıcısını kurulumdan men edecek bir sistem oluşturmam istendi. Bu yüzden basit bir eklenti oluşturdum ve bu eklentinin temellerini sizinle paylaşmak istedim. Bu eğitimde WordPress filtrelerini, eylemlerini, kullanıcı sütunlarının yönetimini ve daha birçok harika şeyi ele alacağız.
Adım 1: Eklentiyi Oluşturun
Tekrar ediyorum, burası çok karmaşık, tek yapmanız gereken “wp-content/plugins” ile “ban-users” adında yeni bir klasör oluşturmak. Bu klasörde “ban-users.php” adında yeni bir dosya oluşturun, açın ve şu kodu yapıştırın:
<?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. Adım: Kullanıcı Profil Sayfasına Onay Kutusu Ekleyin
Yapmamız gereken ilk şey, her kullanıcı profili sürüm sayfasına bir onay kutusu eklemektir. Bu onay kutusunu işaretlediğinizde, kullanıcının artık web sitenize giriş yapmasına izin verilmediğini belirten bir kullanıcı meta seçeneği depolanacaktır.
İşte kod:
/**
* 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' );Bu kod, şimdi oluşturmamız gereken bir işleve çağrı oluşturmaktır. Bu işlev kullanıcıların profil sayfasına bir onay kutusu ekleyecektir.
/**
* 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>';
}Artık onay kutusunun değerini veritabanına kaydedecek fonksiyona ihtiyacımız var:
/**
* 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 );
}
}Gördüğünüz gibi bu yeni işlev iki işlevi daha kullanıyor: rc_ban_users() ve rc_unban_users(). İsimleri oldukça açık, ilki veritabanında kullanıcının yasaklandığı bilgisini saklayacak, ikincisi ise kullanıcıların kilidini açacak.
3. Adım: Kullanıcıları Yasaklayın
Artık rc_ban_users() işlevini oluşturmanın zamanı geldi. Bu fonksiyonda bir değerin zaten kayıtlı olup olmadığını kontrol etmemiz, eğer kayıtlı değilse değeri saklamamız gerekiyor. Daha sonra anlatacağım bir işlevi çağırmamın nedeni budur: 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. Adım: Kullanıcıların yasağını kaldırın
Aşağıdaki işlev, az önce oluşturduğumuzun tam tersidir: Kullanıcıların "yasağı kaldırma" yeteneğini vermemiz gerekir:
/**
* 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 );
}
}Adım 5: Kullanıcı Yasaklandı mı?
rc_ban_users() ve rc_unban_users()'da, bir kullanıcının yasaklanıp yasaklanmadığını kontrol etmek için rc_is_user_banned() adında bir fonksiyon kullandığımızı gördük. Hadi oluşturalım:
/**
* 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 );
}Temel olarak bu işlev, rc_ban_users()'a kaydedilen seçeneğin değerini döndürür.
Şu anda kullanıcı sürümü sayfasında şunu beğenecek yeni bir onay kutumuz var:
Son adım, yasaklı kullanıcıların oturum açmasını önlemek için oturum açma formuna bir işlev bağlamaktır.
Adım 5: Yasaklanan Kullanıcıların Giriş Yapmasını Önleyin
Bunu yapmak için “wp_authenticate_user” adlı bir WordPress varsayılan filtresini kullanmamız gerekir. Bu filtreye "rc_authenticate_user()" adlı bir işlevi bağlayacağız. Bu işlev WP_Error sınıfını kullanacaktır.
/**
* 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;
}Şimdi filtreyi eklememiz gerekiyor:
add_filter( 'wp_authenticate_user', 'rc_authenticate_user', 1 );Kullanıcı profili sürüm sayfasına onay kutusu ekleyen bir eklenti oluşturduk. Değeri onay kutusunda saklamak için ikinci bir işlev kullandık ve bir WordPress kullanıcısını yasaklamak için bir işlev ve bir kullanıcının kilidini açmak için başka bir işlev oluşturduk. Ayrıca bir kullanıcının yasaklanıp yasaklanmadığını kontrol etmek için küçük bir fonksiyon oluşturduk. Ve sonunda WP_Error WordPress varsayılan sınıfını kullanarak “wp_authenticate_user” filtresine bir işlev bağladık.
Kodun Tamamını Github'dan İndirin

