Sådan forbydes en WordPress-bruger

For et par dage siden blev jeg bedt om at oprette et system, der ville forbyde en WordPress-bruger fra en installation. Så jeg oprettede et simpelt plugin, og jeg ville dele med dig det grundlæggende i dette plugin. I denne tutorial vil vi dække WordPress-filtre, handlinger, brugernes kolonnestyring og nogle flere gode ting.


Trin 1: Opret plugin

Igen, her er det meget kompliceret, alt hvad du skal gøre er at oprette en ny mappe med “wp-content / plugins” kaldet “ban-brugere”. Opret i denne mappe en ny fil kaldet “ban-users.php”, åbn den og indsæt denne kode:

Trin 2: Tilføj et afkrydsningsfelt på brugernes profilside

Den første ting, vi skal gøre, er at tilføje et afkrydsningsfelt på hver side med brugerprofiludgaven. Når du markerer dette afkrydsningsfelt, gemmer det en brugermetaindstilling, der angiver, at brugeren ikke har tilladelse til mere at logge ind på dit websted.

Her er koden:

/ **
* Administratorinit
*
* @ adgang offentligt
* @since 1.0
* @ tilbagevenden ugyldig
* /
funktion rc_admin_init () {

// Rediger brugerprofil
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');

Denne kode opretter blot et opkald til en funktion, som vi er nødt til at oprette nu. Denne funktion tilføjer et afkrydsningsfelt til brugerens profilside.

/ **
* Tilføjer tilpasset afkrydsningsfelt til siden med brugerudgaven
*
* @ adgang offentligt
* @since 1.0
* @ tilbagevenden ugyldig
* /
funktion rc_edit_user_profile () {
if (! current_user_can ('edit_users')) {
Vend tilbage;
}

global $ user_id;

// Bruger kan ikke deaktivere sig selv
$ current_user = wp_get_current_user ();
$ current_user_id = $ current_user-> ID;
if ($ current_user_id == $ user_id) {
Vend tilbage;
}

// Kontroller, om det er aktiveret
$ kontrolleret = kontrolleret (get_user_option ('rc_banned', $ user_id, false));

// Vis afkrydsningsfelt
ekko '
Forbud bruger
'; }

Vi skal nu have den funktion, der gemmer værdien af ​​afkrydsningsfeltet i databasen:

/ **
* Gem brugerdefineret afkrydsningsfelt
*
* @ adgang offentligt
* @since 1.0
* @ tilbagevenden ugyldig
* /
funktion rc_edit_user_profile_update () {

if (! current_user_can ('edit_users')) {
Vend tilbage;
}

global $ user_id;

// Bruger kan ikke deaktivere sig selv
$ current_user = wp_get_current_user ();
$ current_user_id = $ current_user-> ID;
if ($ current_user_id == $ user_id) {
Vend tilbage;
}

// Lås
if (isset ($ _POST ['rc_ban']) && $ _POST ['rc_ban'] = 'on') {
rc_ban_user ($ user_id);
} andet {// Lås op
rc_unban_user ($ user_id);
}

}

Som du kan se, bruger denne nye funktion to andre funktioner: rc_ban_users () og rc_unban_users (). Deres navne er temmelig eksplicitte, den første gemmer i databasen det faktum, at en bruger er forbud, den anden vil låse op for brugere.

Trin 3: Forbud brugere

Det er nu tid til at oprette funktionen rc_ban_users (). I denne funktion er vi nødt til at kontrollere, om en værdi allerede er gemt, og hvis ikke skal vi gemme værdien. Det er grunden til, at jeg kalder en funktion, som jeg vil beskrive senere: rc_is_user_banned ():

/ **
* Forbud bruger
*
* @ adgang offentligt
* @since 1.0
* @ tilbagevenden ugyldig
* /
funktion rc_ban_user ($ user_id) {

$ old_status = rc_is_user_banned ($ user_id);

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

Trin 4: Fjern forbud mod brugere

Følgende funktion er det modsatte som den, vi netop har oprettet: vi er nødt til at give mulighed for at "afvise" brugere:

/ **
* Fjern forbud mod bruger
*
* @ adgang offentligt
* @since 1.0
* @ tilbagevenden ugyldig
* /
funktion rc_unban_user ($ user_id) {

$ old_status = rc_is_user_banned ($ user_id);

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

Trin 5: Er bruger forbudt?

Vi så i rc_ban_users () og rc_unban_users () at vi bruger en funktion kaldet rc_is_user_banned () til at kontrollere, om en bruger er forbudt eller ikke. Lad os oprette det:

/ **
* Kontrollerer, om en bruger allerede er forbudt
*
* @ adgang offentligt
* @since 1.0
* @ tilbagevenden ugyldig
* /
funktion rc_is_user_banned ($ user_id) {
return get_user_option ('rc_banned', $ user_id, false);
}

Grundlæggende returnerer denne funktion simpelthen værdien af ​​den indstilling, der er gemt i rc_ban_users ().

På dette tidspunkt har vi et nyt afkrydsningsfelt på siden med brugerudgaven, der kunne lide det:

ban_users_1

Det sidste trin er at koble en funktion til login-formularen for at undgå forbudte brugere til at logge ind.

Trin 5: Undgå forbudte brugere til at logge ind

For at gøre det er vi nødt til at bruge et WordPress-standardfilter kaldet “wp_authenticate_user”. Til dette filter kobler vi en funktion kaldet “rc_authenticate_user ()”. Denne funktion bruger WP_Error klasse.

/ **
* Kontroller, om brugeren er låst under loginprocessen
*
* @ adgang offentligt
* @since 1.0
* @ tilbagevenden ugyldig
* /
funktion rc_authenticate_user ($ bruger) {

if (is_wp_error ($ bruger)) {
returner $ bruger;
}

// Returfejl, hvis brugerkonto er forbudt
$ banned = get_user_option ('rc_banned', $ user-> ID, false);
hvis ($ forbudt) {
returner ny WP_Error ('rc_banned', __ ('FEJL: Denne brugerkonto er deaktiveret. ',' Rc '));
}

returner $ bruger;
}

Nu skal vi bare tilføje filteret:

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

Konklusion

Vi oprettede et plugin, der tilføjer et afkrydsningsfelt til siden med brugerprofiludgaven. Vi brugte en anden funktion til at gemme værdien på afkrydsningsfeltet, og vi opretter en funktion til at forbyde en WordPress-bruger og en anden til at låse en bruger op. Vi oprettede også en lille funktion til at kontrollere, om en bruger er forbudt eller ej. Og vi tilsluttede endelig en funktion til “wp_authenticate_user” -filteret ved hjælp af WP_Error WordPress standardklasse.

Hvis du kunne lide denne tutorial, vil du elske premium-versionen af ​​dette plugin: Brugere Access Manager.

Download fuld kode på Github

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