The lostpassword_user_data WordPress PHP Filter allows you to apply custom validation or modify user data during a password reset request, using data other than the username or email address.
Usage
add_filter('lostpassword_user_data', 'my_lostpassword_user_data', 10, 2); function my_lostpassword_user_data($user_data, $errors) { // your custom code here return $user_data; }
Parameters
- $user_data (WP_User|false): WP_User object if found, false if the user does not exist.
- $errors (WP_Error): A WP_Error object containing any errors generated by using invalid credentials.
More information
See WordPress Developer Resources: lostpassword_user_data
Examples
Validate user by custom field
add_filter('lostpassword_user_data', 'validate_user_by_custom_field', 10, 2); function validate_user_by_custom_field($user_data, $errors) { // Check if user has a custom field 'account_status' set to 'active' if ($user_data && get_user_meta($user_data->ID, 'account_status', true) !== 'active') { $errors->add('inactive_account', __('Your account is not active.')); return false; } return $user_data; }
Log password reset attempts
add_filter('lostpassword_user_data', 'log_password_reset_attempts', 10, 2); function log_password_reset_attempts($user_data, $errors) { // Log password reset attempt, whether successful or not if ($user_data) { update_user_meta($user_data->ID, 'last_password_reset_attempt', current_time('mysql')); } return $user_data; }
Add custom error for non-existent user
add_filter('lostpassword_user_data', 'custom_error_for_non_existent_user', 10, 2); function custom_error_for_non_existent_user($user_data, $errors) { // Add custom error message for non-existent users if (!$user_data) { $errors->add('user_not_found', __('We could not find a user with that email address.')); } return $user_data; }
Restrict password reset for specific roles
add_filter('lostpassword_user_data', 'restrict_password_reset_for_roles', 10, 2); function restrict_password_reset_for_roles($user_data, $errors) { // Restrict password reset for users with the 'administrator' role if ($user_data && in_array('administrator', $user_data->roles)) { $errors->add('admin_reset_not_allowed', __('Password reset is not allowed for administrators.')); return false; } return $user_data; }
Notify admin about successful password reset attempts
add_filter('lostpassword_user_data', 'notify_admin_about_password_reset', 10, 2); function notify_admin_about_password_reset($user_data, $errors) { // Send notification to the admin about successful password reset requests if ($user_data) { $admin_email = get_option('admin_email'); $subject = 'User Password Reset'; $message = 'A password reset request has been made for user: ' . $user_data->user_login; wp_mail($admin_email, $subject, $message); } return $user_data; }