WordPress 사용자를 금지하는 방법
며칠 전에 WordPress 사용자의 설치를 금지하는 시스템을 만들어 달라는 요청을 받았습니다. 그래서 저는 간단한 플러그인을 만들었고 이 플러그인의 기본 사항을 여러분과 공유하고 싶었습니다. 이 튜토리얼에서는 WordPress 필터, 작업, 사용자 열 관리 및 기타 유용한 기능을 다룹니다.
1단계: 플러그인 생성
다시 한 번, 여기서는 매우 복잡합니다. "ban-users"라는 "wp-content/plugins"가 포함된 새 폴더를 생성하기만 하면 됩니다. 이 폴더에서 "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단계: 사용자 프로필 페이지에 확인란 추가
가장 먼저 해야 할 일은 각 사용자 프로필 편집 페이지에 확인란을 추가하는 것입니다. 이 확인란을 선택하면 사용자가 더 이상 웹사이트에 로그인할 수 없음을 나타내는 사용자 메타 옵션이 저장됩니다.
코드는 다음과 같습니다.
/**
* 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단계: 로그인이 금지된 사용자 방지
그렇게 하려면 “wp_authenticate_user”라는 WordPress 기본 필터를 사용해야 합니다. 이 필터에 '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_Error WordPress 기본 클래스를 사용하여 “wp_authenticate_user” 필터에 함수를 연결했습니다.
Github에서 전체 코드 다운로드

