web-dev-qa-db-fra.com

Supprimer l'utilisateur du frontend

Bonjour, je travaille sur un administrateur frontal où un utilisateur doit pouvoir supprimer son compte. current_user() est une fonction personnalisée de moi qui récupère les métadonnées de l'utilisateur.

Est-ce que quelqu'un sait comment je peux faire ce travail?

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

Prises directement dans la documentation wp_delete_user :

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 );
}

Choses à noter:

  • Votre code n'a pas vérifié si l'utilisateur était connecté ou non
  • au moment où vous imprimez le lien de suppression d'utilisateur, l'action init est déjà terminée et est terminée. Votre utilisateur de suppression ne fonctionnera donc pas. Cette partie du code doit être exécutée plus tôt, par exemple dans functions.php ou un plugin.

modifier:

Si vous pouvez placer ceci dans votre fichier de fonction themes:

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