"Delete My Account" Request in My Account
Adds a button to the Account details page that sends a personal data erasure request through WordPress's privacy tools, which the customer confirms by email.
Opens WPIDE on
Code
add_action( 'woocommerce_edit_account_form_end', function () {
printf(
'<p class="wpide-delete-account"><a class="button" href="%1$s" onclick="return confirm(%2$s)">%3$s</a></p>',
esc_url( wp_nonce_url( add_query_arg( 'wpide_erase_request', 1, wc_get_account_endpoint_url( 'edit-account' ) ), 'wpide_erase_request' ) ),
esc_attr( wp_json_encode( 'We will email you a link to confirm that you want your account and personal data deleted. Continue?' ) ),
esc_html( 'Request account deletion' )
);
} );
add_action( 'template_redirect', function () {
if ( empty( $_GET['wpide_erase_request'] ) || ! is_user_logged_in() ) {
return;
}
if ( ! isset( $_GET['_wpnonce'] ) || ! wp_verify_nonce( sanitize_key( $_GET['_wpnonce'] ), 'wpide_erase_request' ) ) {
return;
}
$request_id = wp_create_user_request( wp_get_current_user()->user_email, 'remove_personal_data' );
if ( is_wp_error( $request_id ) ) {
wc_add_notice( 'A deletion request is already pending for your account. Please check your inbox for the confirmation email.', 'notice' );
} else {
wp_send_user_request( $request_id );
wc_add_notice( 'Please check your inbox and click the link to confirm your account deletion request.' );
}
wp_safe_redirect( wc_get_account_endpoint_url( 'edit-account' ) );
exit;
} );
Notes
Requests appear under Tools > Erase Personal Data for you to complete; nothing is deleted automatically.
How to add this snippet
- Install WPIDE on your WordPress site (it is free) and open Code Snippets.
- Use snippet above adds it from the library in one click. Or copy the code into a new snippet with the same code type.
- It is added inactive: review the code and settings, then switch it on.