Com prohibir un usuari de WordPress

Fa uns dies se’m va demanar que creés un sistema que prohibís a un usuari de WordPress una instal·lació. Així que he creat un complement senzill i he volgut compartir amb vosaltres les bases d’aquest complement. En aquest tutorial tractarem filtres de WordPress, accions, gestió de columnes d’usuaris i algunes coses més fantàstiques.


Pas 1: crea el connector

Una vegada més, aquí és molt complicat, tot el que heu de fer és crear una carpeta nova amb “wp-content / plugins” anomenada “ban-users”. En aquesta carpeta, creeu un fitxer nou anomenat “ban-users.php”, obriu-lo i enganxeu aquest codi:

Pas 2: afegiu una casella de selecció a la pàgina de perfil de l’usuari

El primer que hem de fer és afegir una casella de selecció a cada pàgina d’edició del perfil d’usuari. Quan marqueu aquesta casella de selecció, emmagatzemarà una opció de meta de l’usuari que indicarà que l’usuari ja no permet accedir al vostre lloc web..

Aquí teniu el codi:

/ **
* Administració inicial
*
* @access public
* @since 1.0
* @return nul
* /
funció rc_admin_init () {

// Edita el perfil d’usuari
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');

Aquest codi simplement està creant una trucada a una funció que hem de crear ara. Aquesta funció afegirà una casella de selecció a la pàgina del perfil d’usuaris.

/ **
* Afegeix una casella de verificació personalitzada a la pàgina d’edició de l’usuari
*
* @access public
* @since 1.0
* @return nul
* /
function rc_edit_user_profile () {
if (! current_user_can ("edit_users")) {
retorn;
}

global $ user_id;

// L’usuari no es pot desactivar
$ current_user = wp_get_current_user ();
$ current_user_id = $ current_user-> ID;
if ($ current_user_id == $ user_id) {
retorn;
}

// Comprova si està activat
$ comprovat = comprovat (get_user_option ('rc_banned', $ user_id, false));

// Casella de selecció de la pantalla
ressò '
Prohibir l’usuari
'; }

Ara hem de tenir la funció que desarà a la base de dades el valor de la casella de selecció:

/ **
* Desa la casella de selecció personalitzada
*
* @access public
* @since 1.0
* @return nul
* /
function rc_edit_user_profile_update () {

if (! current_user_can ("edit_users")) {
retorn;
}

global $ user_id;

// L’usuari no es pot desactivar
$ current_user = wp_get_current_user ();
$ current_user_id = $ current_user-> ID;
if ($ current_user_id == $ user_id) {
retorn;
}

// Bloquejar
if (isset ($ _POST ['rc_ban']) && $ _POST ['rc_ban'] = 'on') {
rc_ban_user ($ user_id);
} else {// Desbloquejar
rc_unban_user ($ user_id);
}

}

Com podeu veure, aquesta nova funció utilitza altres dues funcions: rc_ban_users () i rc_unban_users (). Els seus noms són força explícits, el primer emmagatzemarà a la base de dades el fet que un usuari està prohibit, el segon desbloquejarà els usuaris.

Pas 3: prohibir els usuaris

Ara és hora de crear la funció rc_ban_users (). En aquesta funció, hem de comprovar si un valor ja està emmagatzemat, i si no, hem de guardar el valor. És per això que truco a una funció que descriuré més endavant: rc_is_user_banned ():

/ **
Usuari prohibició
*
* @access public
* @since 1.0
* @return nul
* /
function rc_ban_user ($ user_id) {

$ old_status = rc_is_user_banned ($ user_id);

// Actualitza l'estat
if (! $ old_status) {
update_user_option ($ user_id, 'rc_banned', cert, fals);
}
}

Pas 4: prohibir els usuaris

La següent funció és la contrària a la que acabem de crear: hem de donar la possibilitat de “prohibir” els usuaris:

/ **
* Usuari de prohibició
*
* @access public
* @since 1.0
* @return nul
* /
function rc_unban_user ($ user_id) {

$ old_status = rc_is_user_banned ($ user_id);

// Actualitza l'estat
if ($ old_status) {
update_user_option ($ user_id, 'rc_banned', fals, fals);
}
}

Pas 5: Es prohibeix l'usuari?

Vam veure a rc_ban_users () i rc_unban_users () que utilitzem una funció anomenada rc_is_user_banned () per comprovar si un usuari està prohibit o no. La creem:

/ **
* Comprova si un usuari ja està prohibit
*
* @access public
* @since 1.0
* @return nul
* /
function rc_is_user_banned ($ user_id) {
retorna get_user_option ('rc_banned', $ user_id, fals);
}

Bàsicament, aquesta funció simplement retorna el valor de l’opció desada a rc_ban_users ().

En aquest moment, tenim una nova casella de selecció a la pàgina d’edició d’usuaris que hauria de ser així:

ban_users_1

L’últim pas és connectar una funció al formulari d’inici de sessió per evitar que els usuaris prohibits s’iniciïn.

Pas 5: Eviteu que els usuaris prohibits accedeixin

Per fer-ho, hem d’utilitzar un filtre per defecte de WordPress anomenat “wp_authenticate_user”. A aquest filtre hi anirem connectant una funció anomenada "rc_authenticate_user ()". Aquesta funció utilitzarà el WP_Error.

/ **
* Comproveu si l’usuari està bloquejat durant el procés d’inici de sessió
*
* @access public
* @since 1.0
* @return nul
* /
function rc_authenticate_user ($ user) {

if (is_wp_error ($ user)) {
retornar $ usuari;
}

// Error de devolució si es prohibeix el compte d’usuari
$ prohibit = get_user_option ('rc_banned', $ user-> ID, fals);
if ($ prohibit) {
retorna el nou WP_Error ('rc_banned', __ ('ERROR: Aquest compte d'usuari està desactivat. ',' Rc '));
}

retornar $ usuari;
}

Ara només cal afegir el filtre:

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

Conclusió

Hem creat un complement que afegeix una casella de selecció a la pàgina d’edició del perfil d’usuari. Hem utilitzat una segona funció per emmagatzemar el valor a la casella de selecció i hem creat una funció per prohibir un usuari de WordPress i una altra per desbloquejar un usuari. També hem creat una petita funció per comprovar si un usuari està prohibit o no. Finalment, vam enganxar una funció al filtre "wp_authenticate_user" mitjançant la classe predeterminada de WordPress WP_Error.

Si us ha agradat aquest tutorial, us encantarà la versió premium d'aquest complement: Administrador d'accés dels usuaris.

Descarrega el codi complet a 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