it-swarm.com.de

Benutzer vom Frontend löschen

Hallo, ich arbeite an einem Frontend-Administrator, bei dem ein Benutzer in der Lage sein muss, sein Konto zu löschen. current_user() ist eine maßgeschneiderte Funktion von mir, die die Metadaten des Benutzers abruft.

Weiß jemand, wie ich das zum Laufen bringen kann?

echo '<a class="remove" href="' . get_permalink() . '?remove_account">' . __( 'Click here to remove your account' ) . '</a>';

// Remove account
function terminate_account() {
    require_once( ABSPATH . 'wp-admin/includes/user.php' );
    wp_delete_user( current_user( 'ID' ) );
}

if( isset( $_GET['remove_account'] ) ) {
    add_action( 'init', 'terminate_account' );
}
2
Robbert

Entnommen direkt aus der wp_delete_user Dokumentation :

if(is_user_logged_in() && !empty($_GET['DeleteMyAccount'])) {
    add_action('init', 'remove_logged_in_user');
}

function remove_logged_in_user() {
    require_once(ABSPATH.'wp-admin/includes/user.php' );
    $current_user = wp_get_current_user();
    wp_delete_user( $current_user->ID );
}

Dinge zu beachten:

  • Ihr Code hat nicht überprüft, ob der Benutzer angemeldet war oder nicht
  • zu dem Zeitpunkt, an dem Sie den Link zum Entfernen von Benutzern drucken, ist die Init-Aktion bereits ausgeführt und abgeschlossen, sodass der Benutzer zum Löschen nicht mehr funktioniert. Dieser Teil des Codes muss früher ausgeführt werden, zum Beispiel in functions.php oder einem Plugin

bearbeiten:

Wenn Sie dies in Ihre Themes-Funktionsdatei einfügen können:

add_action('init', 'remove_logged_in_user');

function remove_logged_in_user() {
    require_once(ABSPATH.'wp-admin/includes/user.php' );
    $current_user = wp_get_current_user();
    $success = wp_delete_user( $current_user->ID );
    wp_die('wp delete gave: <pre>"'.print_r($success).'"</pre>');
}
1
Tom J Nowell