# "Delete My Account" Request Button

> Adds a [wpide_delete_account] shortcode with a button that files an erasure request in WordPress's privacy tools; the member confirms by email and you process it under Tools > Erase Personal Data.

- Type: PHP
- Runs: Run everywhere
- Category: [Users](https://wpide.com/library/category/users/)
- Tags: privacy, account, gdpr
- Author: WPIDE Team
- Installs: 0
- Updated: 2026-10-28
- Page: https://wpide.com/library/account-deletion-request-button/

## Code

```php
add_action( 'template_redirect', function () {
    if ( empty( $_POST['wpide_erase_nonce'] ) || ! is_user_logged_in() ) {
        return;
    }

    if ( ! wp_verify_nonce( sanitize_key( $_POST['wpide_erase_nonce'] ), 'wpide_erase_request' ) ) {
        wp_die( 'The form expired. Please go back and try again.' );
    }

    $user       = wp_get_current_user();
    $request_id = wp_create_user_request( $user->user_email, 'remove_personal_data' );

    if ( is_wp_error( $request_id ) ) {
        $state = 'duplicate_request' === $request_id->get_error_code() ? 'pending' : 'error';
    } else {
        wp_send_user_request( $request_id );
        $state = 'sent';
    }

    wp_safe_redirect( add_query_arg( 'erase-request', $state ) );
    exit;
} );

add_shortcode( 'wpide_delete_account', function () {
    if ( ! is_user_logged_in() ) {
        return '';
    }

    $messages = array(
        'sent'    => 'Check your email: we sent a link to confirm the deletion request.',
        'pending' => 'You already have a deletion request in progress. Check your email for the confirmation link.',
        'error'   => 'Something went wrong. Please contact us to delete your account.',
    );
    $state = isset( $_GET['erase-request'] ) ? sanitize_key( $_GET['erase-request'] ) : '';

    if ( isset( $messages[ $state ] ) ) {
        return '<p class="wpide-erase-notice" role="status">' . esc_html( $messages[ $state ] ) . '</p>';
    }

    return '<form method="post" class="wpide-erase-form" onsubmit="return confirm(\'Request deletion of your account and personal data?\');">'
        . wp_nonce_field( 'wpide_erase_request', 'wpide_erase_nonce', true, false )
        . '<p>Want us to delete your account and personal data? We will email you to confirm.</p>'
        . '<p><button type="submit">Request account deletion</button></p></form>';
} );
```

## Notes

Nothing is deleted automatically; it uses the core personal-data erasure workflow so you stay in control.

## How to use it

Install the free WPIDE plugin (https://wordpress.org/plugins/wpide/), find ""Delete My Account" Request Button" in its snippet library and add it in one click; or create a new PHP snippet in WPIDE (or any code snippets plugin) and paste the code above. More snippets: https://wpide.com/library/
