Based on retrieve_password() in core wp-login.php.
public static retrieve_password ( ) : boolean | ||
return | boolean | True: when finish. False: on error |
/** * Handle lost password form */ public static function process_lost_password() { if (isset($_POST['wc_reset_password']) && isset($_POST['user_login']) && isset($_POST['_wpnonce']) && wp_verify_nonce($_POST['_wpnonce'], 'lost_password')) { WC_Shortcode_My_Account::retrieve_password(); } }
/** * Handle lost password form. */ public static function process_lost_password() { if (isset($_POST['wc_reset_password']) && isset($_POST['user_login']) && isset($_POST['_wpnonce']) && wp_verify_nonce($_POST['_wpnonce'], 'lost_password')) { $success = WC_Shortcode_My_Account::retrieve_password(); // If successful, redirect to my account with query arg set if ($success) { wp_redirect(add_query_arg('reset-link-sent', 'true', remove_query_arg(array('key', 'login', 'reset')))); exit; } } }
/** * Handle reset password form */ public function process_reset_password() { if (!isset($_POST['wc_reset_password'])) { return; } // process lost password form if (isset($_POST['user_login']) && isset($_POST['_wpnonce'])) { wp_verify_nonce($_POST['_wpnonce'], 'woocommerce-lost_password'); WC_Shortcode_My_Account::retrieve_password(); } // process reset password form if (isset($_POST['password_1']) && isset($_POST['password_2']) && isset($_POST['reset_key']) && isset($_POST['reset_login']) && isset($_POST['_wpnonce'])) { // verify reset key again $user = WC_Shortcode_My_Account::check_password_reset_key($_POST['reset_key'], $_POST['reset_login']); if (is_object($user)) { // save these values into the form again in case of errors $args['key'] = wc_clean($_POST['reset_key']); $args['login'] = wc_clean($_POST['reset_login']); wp_verify_nonce($_POST['_wpnonce'], 'woocommerce-reset_password'); if (empty($_POST['password_1']) || empty($_POST['password_2'])) { wc_add_notice(__('Please enter your password.', 'woocommerce'), 'error'); $args['form'] = 'reset_password'; } if ($_POST['password_1'] !== $_POST['password_2']) { wc_add_notice(__('Passwords do not match.', 'woocommerce'), 'error'); $args['form'] = 'reset_password'; } $errors = new WP_Error(); do_action('validate_password_reset', $errors, $user); if ($errors->get_error_messages()) { foreach ($errors->get_error_messages() as $error) { wc_add_notice($error, 'error'); } } if (0 == wc_notice_count('error')) { WC_Shortcode_My_Account::reset_password($user, $_POST['password_1']); do_action('woocommerce_customer_reset_password', $user); wp_redirect(add_query_arg('reset', 'true', remove_query_arg(array('key', 'login')))); exit; } } } }