Ich wurde vor ein paar Tagen gebeten, ein System zu erstellen, das einem WordPress-Benutzer eine Installation verbietet. Also habe ich ein einfaches Plugin erstellt und wollte mit Ihnen die Grundlagen dieses Plugins teilen. In diesem Tutorial werden wir WordPress-Filter, Aktionen, die Verwaltung von Benutzerspalten und einige weitere großartige Dinge behandeln.
Schritt 1: Erstellen Sie das Plugin
Auch hier ist es sehr kompliziert, Sie müssen lediglich einen neuen Ordner mit „wp-content/plugins“ namens „ban-users“ erstellen. Erstellen Sie in diesem Ordner eine neue Datei namens „ban-users.php“, öffnen Sie sie und fügen Sie diesen Code ein:
<?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
*/
Schritt 2: Hinzufügen eines Kontrollkästchens auf der Profilseite des Benutzers
Das erste, was wir tun müssen, ist, auf jeder Seite der Benutzerprofil-Edition ein Kontrollkästchen hinzuzufügen. Wenn Sie dieses Kontrollkästchen aktivieren, wird eine Benutzer-Meta-Option gespeichert, die anzeigt, dass der Benutzer sich nicht mehr bei Ihrer Website anmelden darf.
Hier ist der Code:
/**
* 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' );
Dieser Code erzeugt einfach einen Aufruf einer Funktion, die wir jetzt erstellen müssen. Diese Funktion fügt der Profilseite des Benutzers ein Kontrollkästchen hinzu.
/**
* 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>';
}
Wir brauchen jetzt die Funktion, die den Wert des Kontrollkästchens in der Datenbank speichert:
/**
* 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 );
}
}
Wie Sie sehen, verwendet diese neue Funktion zwei weitere Funktionen: rc_ban_users() und rc_unban_users(). Ihre Namen sind ziemlich eindeutig, der erste speichert in der Datenbank die Tatsache, dass ein Benutzer gesperrt ist, der zweite entsperrt Benutzer.
Schritt 3: Benutzer sperren
Jetzt ist es an der Zeit, die Funktion rc_ban_users() zu erstellen. In dieser Funktion müssen wir prüfen, ob bereits ein Wert gespeichert ist, und wenn nicht, müssen wir den Wert speichern. Aus diesem Grund rufe ich eine Funktion auf, die ich später beschreibe: 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 );
}
}
Schritt 4: Sperre von Benutzern aufheben
Die folgende Funktion ist das Gegenteil von der, die wir gerade erstellt haben: Wir müssen Benutzern die Möglichkeit geben, die Sperre aufzuheben:
/**
* 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 );
}
}
Schritt 5: Ist der Benutzer gesperrt?
Wir haben in rc_ban_users() und rc_unban_users() gesehen, dass wir eine Funktion namens rc_is_user_banned() verwenden, um zu überprüfen, ob ein Benutzer gesperrt ist oder nicht. Lass es uns erstellen:
/**
* 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 );
}
Im Grunde gibt diese Funktion einfach den Wert der in rc_ban_users() gespeicherten Option zurück.
Zu diesem Zeitpunkt haben wir ein neues Kontrollkästchen auf der Seite der Benutzerausgabe, das so aussehen sollte:
Der letzte Schritt besteht darin, eine Funktion in das Anmeldeformular einzubinden, um zu verhindern, dass Benutzer sich anmelden.
Schritt 5: Vermeiden Sie gesperrte Benutzer zur Anmeldung
Dazu müssen wir einen WordPress-Standardfilter namens „wp_authenticate_user“ verwenden. An diesen Filter hängen wir eine Funktion namens „rc_authenticate_user()“. Diese Funktion verwendet die WP_Fehlerklasse.
/**
* 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;
}
Jetzt müssen wir nur noch den Filter hinzufügen:
add_filter( 'wp_authenticate_user', 'rc_authenticate_user', 1 );
Wir haben ein Plugin erstellt, das der Benutzerprofil-Editionsseite ein Kontrollkästchen hinzufügt. Wir haben eine zweite Funktion verwendet, um den Wert in der Checkbox zu speichern, und wir erstellen eine Funktion zum Sperren eines WordPress-Benutzers und eine weitere zum Entsperren eines Benutzers. Wir haben auch eine kleine Funktion erstellt, um zu überprüfen, ob ein Benutzer gesperrt ist oder nicht. Und schließlich haben wir eine Funktion an den Filter „wp_authenticate_user“ angehängt, die die WordPress-Standardklasse WP_Error verwendet.
Vollständigen Code auf Github herunterladen