Slik forbyr du en WordPress-bruker

Jeg ble spurt for noen dager siden om å lage et system som ville forby en WordPress-bruker fra en installasjon. Så jeg opprettet en enkel plugin, og jeg ville dele med deg det grunnleggende om denne plugin. I denne opplæringen vil vi dekke WordPress-filtre, handlinger, brukerstøttehåndtering og noen flere flotte ting.


Trinn 1: Lag plugin

Nok en gang, her er det veldig komplisert, alt du trenger å gjøre er å lage en ny mappe med “wp-content / plugins” kalt “ban-brukere”. I denne mappen lager du en ny fil kalt “ban-users.php”, åpner den og limer inn denne koden:

Trinn 2: Legg til en avmerkingsboks på brukers profilside

Det første vi må gjøre er å legge til en avkrysningsrute på hver utgave-side for brukerprofil. Når du merker av for denne avmerkingsboksen, vil det lagre et metaanalternativ for brukeren som indikerer at brukeren ikke har lov til å logge inn på nettstedet ditt lenger.

Her er koden:

/ **
* Administrator init
*
* @ tilgang offentlig
* @since 1.0
* @ return ugyldig
* /
funksjon rc_admin_init () {

// Rediger brukerprofil
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 koden er ganske enkelt å opprette en samtale til en funksjon som vi må opprette nå. Denne funksjonen vil legge til en avkrysningsrute på profilsiden for brukere.

/ **
* Legger til tilpasset avkrysningsrute på siden med brukerutgaven
*
* @ tilgang offentlig
* @since 1.0
* @ return ugyldig
* /
funksjon rc_edit_user_profile () {
if (! current_user_can ('edit_users')) {
komme tilbake;
}

global $ user_id;

// Bruker kan ikke deaktivere seg selv
$ current_user = wp_get_current_user ();
$ current_user_id = $ current_user-> ID;
if ($ current_user_id == $ user_id) {
komme tilbake;
}

// Sjekk om det er aktivert
$ sjekket = sjekket (get_user_option ('rc_banned', $ user_id, false));

// Vis avkrysningsrute
ekko '
Forbud bruker
'; }

Vi må nå ha funksjonen som vil lagre verdien i avkrysningsboksen i databasen:

/ **
* Lagre egendefinert avkrysningsrute
*
* @ tilgang offentlig
* @since 1.0
* @ return ugyldig
* /
funksjon rc_edit_user_profile_update () {

if (! current_user_can ('edit_users')) {
komme tilbake;
}

global $ user_id;

// Bruker kan ikke deaktivere seg selv
$ current_user = wp_get_current_user ();
$ current_user_id = $ current_user-> ID;
if ($ current_user_id == $ user_id) {
komme tilbake;
}

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

}

Som du kan se, bruker denne nye funksjonen to andre funksjoner: rc_ban_users () og rc_unban_users (). Navnene deres er ganske eksplisitte, den første vil lagre i databasen det faktum at en bruker er forbud, den andre vil låse opp brukere.

Trinn 3: Forbud brukere

Det er nå på tide å opprette rc_ban_users () -funksjonen. I denne funksjonen må vi sjekke om en verdi allerede er lagret, og hvis ikke må vi lagre verdien. Det er grunnen til at jeg kaller en funksjon som jeg vil beskrive senere: rc_is_user_banned ():

/ **
* Forbud bruker
*
* @ tilgang offentlig
* @since 1.0
* @ return ugyldig
* /
funksjon rc_ban_user ($ user_id) {

$ old_status = rc_is_user_banned ($ user_id);

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

Trinn 4: Fjern forbud mot brukere

Følgende funksjon er motsatt som den vi nettopp opprettet: vi må gi muligheten til å "fjerne forbud" -brukere:

/ **
* Un-ban bruker
*
* @ tilgang offentlig
* @since 1.0
* @ return ugyldig
* /
funksjon rc_unban_user ($ user_id) {

$ old_status = rc_is_user_banned ($ user_id);

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

Trinn 5: Er bruker forbudt?

Vi så i rc_ban_users () og rc_unban_users () at vi bruker en funksjon som heter rc_is_user_banned () for å sjekke om en bruker er utestengt eller ikke. La oss lage det:

/ **
* Sjekker om en bruker allerede er utestengt
*
* @ tilgang offentlig
* @since 1.0
* @ return ugyldig
* /
funksjon rc_is_user_banned ($ user_id) {
return get_user_option ('rc_banned', $ user_id, false);
}

I utgangspunktet returnerer denne funksjonen ganske enkelt verdien til alternativet som er lagret i rc_ban_users ().

For øyeblikket har vi en ny avkrysningsrute på brukerutgavesiden som vil like det:

ban_users_1

Det siste trinnet er å koble en funksjon til påloggingsskjemaet for å unngå at forbudte brukere skal logge inn.

Trinn 5: Unngå forbudte brukere å logge inn

For å gjøre det må vi bruke et WordPress standardfilter kalt “wp_authenticate_user”. Til dette filteret kobler vi til en funksjon som heter “rc_authenticate_user ()”. Denne funksjonen vil bruke WP_Error klasse.

/ **
* Sjekk om brukeren er låst under påloggingsprosessen
*
* @ tilgang offentlig
* @since 1.0
* @ return ugyldig
* /
funksjon rc_authenticate_user ($ bruker) {

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

// Returfeil hvis brukerkonto er utestengt
$ banned = get_user_option ('rc_banned', $ user-> ID, false);
if ($ utestengt) {
returner ny WP_Error ('rc_banned', __ ('FEIL: Denne brukerkontoen er deaktivert. ',' Rc '));
}

returner $ bruker;
}

Nå, vi trenger bare å legge til filteret:

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

Konklusjon

Vi opprettet en plugin som legger til en avmerkingsboks på siden med brukerprofilutgaven. Vi brukte en andre funksjon for å lagre verdien på avkrysningsruten, og vi oppretter en funksjon for å forby en WordPress-bruker og en annen for å låse opp en bruker. Vi opprettet også en liten funksjon for å sjekke om en bruker er utestengt eller ikke. Og endelig koblet vi en funksjon til “wp_authenticate_user” -filteret ved å bruke standardklassen WP_Error WordPress.

Hvis du likte denne opplæringen, vil du elske premiumversjonen av denne pluginen: Users Access Manager.

Last ned full kode på Github

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map