Hur man förbjuder en WordPress-användare

Jag ombads för några dagar sedan att skapa ett system som skulle förbjuda en WordPress-användare från en installation. Så jag skapade ett enkelt plugin och jag ville dela med dig grunderna i detta plugin. I den här tutorialen kommer vi att täcka WordPress-filter, åtgärder, användarens kolumnhantering och några fler fantastiska saker.


Steg 1: Skapa plugin

Återigen, här är det väldigt komplicerat, allt du behöver göra är att skapa en ny mapp med “wp-content / plugins” som kallas “ban-användare”. I den här mappen, skapa en ny fil som heter “ban-users.php”, öppna den och klistra in den här koden:

Steg 2: Lägg till en kryssruta på användarens profilsida

Det första vi behöver göra är att lägga till en kryssruta på varje utgångssida för användarprofil. När du markerar den här kryssrutan kommer det att lagra ett metatyp för användare som indikerar att användaren inte längre har tillåtelse att logga in på din webbplats.

Här är koden:

/ **
* Admin init
*
* @ tillgång offentligt
* @since 1.0
* @ return ogiltig
* /
funktion rc_admin_init () {

// Redigera användarprofil
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');

Den här koden skapar helt enkelt ett samtal till en funktion som vi måste skapa nu. Den här funktionen lägger till en kryssruta på användars profilsida.

/ **
* Lägger till anpassad kryssruta på sidan med användarutgåvor
*
* @ tillgång offentligt
* @since 1.0
* @ return ogiltig
* /
funktion rc_edit_user_profile () {
if (! current_user_can ('edit_users')) {
lämna tillbaka;
}

global $ user_id;

// Användaren kan inte inaktivera sig själv
$ current_user = wp_get_current_user ();
$ current_user_id = $ current_user-> ID;
if ($ current_user_id == $ user_id) {
lämna tillbaka;
}

// Kontrollera om det är aktiverat
$ checkad = kontrollerad (get_user_option ('rc_banned', $ user_id, false));

// Visa kryssrutan
echo '
Stänga av användare
'; }

Vi måste nu ha den funktion som sparar kryssrutan i databasen:

/ **
* Spara anpassad kryssruta
*
* @ tillgång offentligt
* @since 1.0
* @ return ogiltig
* /
funktion rc_edit_user_profile_update () {

if (! current_user_can ('edit_users')) {
lämna tillbaka;
}

global $ user_id;

// Användaren kan inte inaktivera sig själv
$ current_user = wp_get_current_user ();
$ current_user_id = $ current_user-> ID;
if ($ current_user_id == $ user_id) {
lämna tillbaka;
}

// Lås
if (isset ($ _POST ['rc_ban']) && $ _POST ['rc_ban'] = 'på') {
rc_ban_user ($ user_id);
} annars {// Lås upp
rc_unban_user ($ user_id);
}

}

Som du ser den här nya funktionen använder två andra funktioner: rc_ban_users () och rc_unban_users (). Deras namn är ganska uttryckliga, den första lagrar i databasen det faktum att en användare är förbud, den andra kommer att låsa upp användare.

Steg 3: Förbud av användare

Det är nu dags att skapa funktionen rc_ban_users (). I den här funktionen måste vi kontrollera om ett värde redan är lagrat, och om inte måste vi lagra värdet. Det är anledningen till att jag kallar en funktion som jag kommer att beskriva senare: rc_is_user_banned ():

/ **
* Stänga av användare
*
* @ tillgång offentligt
* @since 1.0
* @ return ogiltig
* /
funktion rc_ban_user ($ user_id) {

$ old_status = rc_is_user_banned ($ user_id);

// Uppdatera status
if (! $ old_status) {
update_user_option ($ user_id, 'rc_banned', true, false);
}
}

Steg 4: Avbryt användare

Följande funktion är motsatt som den vi just skapade: vi måste ge möjligheten att "avbryta" användare:

/ **
* Avbryta användaren
*
* @ tillgång offentligt
* @since 1.0
* @ return ogiltig
* /
funktion rc_unban_user ($ user_id) {

$ old_status = rc_is_user_banned ($ user_id);

// Uppdatera status
if ($ old_status) {
update_user_option ($ user_id, 'rc_banned', falsk, falsk);
}
}

Steg 5: Är användaren förbjuden?

Vi såg i rc_ban_users () och rc_unban_users () att vi använder en funktion som heter rc_is_user_banned () för att kontrollera om en användare är förbjuden eller inte. Låt oss skapa det:

/ **
* Kontrollerar om en användare redan är förbjuden
*
* @ tillgång offentligt
* @since 1.0
* @ return ogiltig
* /
funktion rc_is_user_banned ($ user_id) {
returnera get_user_option ('rc_banned', $ user_id, false);
}

I grunden returnerar denna funktion helt enkelt värdet på det alternativ som är sparat i rc_ban_users ().

För närvarande har vi en ny kryssruta på sidan med användarutgåvor som skulle gilla det:

ban_users_1

Det sista steget är att ansluta en funktion till inloggningsformuläret för att undvika förbjudna användare att logga in.

Steg 5: Undvik att förbjudna användare ska logga in

För att göra det måste vi använda ett WordPress-standardfilter som heter "wp_authenticate_user". Till det här filtret kommer vi att ansluta en funktion som heter "rc_authenticate_user ()". Denna funktion kommer att använda WP_Error klass.

/ **
* Kontrollera om användaren är låst under inloggningsprocessen
*
* @ tillgång offentligt
* @since 1.0
* @ return ogiltig
* /
funktion rc_authenticate_user ($ användare) {

if (is_wp_error ($ user)) {
returnera $ användare;
}

// Returfel om användarkonto är förbjudet
$ banned = get_user_option ('rc_banned', $ user-> ID, false);
if ($ förbjudet) {
returnera ny WP_Error ('rc_banned', __ ('FEL: Det här användarkontot är inaktiverat. ',' Rc '));
}

returnera $ användare;
}

Nu behöver vi bara lägga till filtret:

add_filter ('wp_authenticate_user', 'rc_authenticate_user', 1);

Slutsats

Vi skapade ett plugin som lägger till en kryssruta på sidan för användarprofilutgåva. Vi använde en andra funktion för att lagra värdet i kryssrutan och vi skapar en funktion för att förbjuda en WordPress-användare och en annan för att låsa upp en användare. Vi skapade också en liten funktion för att kontrollera om en användare är förbjuden eller inte. Och vi anslöt till slut en funktion till “wp_authenticate_user” -filtret med WP_Error WordPress-standardklassen.

Om du gillade den här självstudien kommer du att älska premiumversionen av det här insticksprogrammet: Användare Access Manager.

Ladda ner full kod på Github

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me