WC_Shortcode_My_Account::retrieve_password()public staticWC 1.0

Handles sending password retrieval email to customer.

Based on retrieve_password() in core wp-login.php.

Method of the class: WC_Shortcode_My_Account{}

Return

true|false. True: when finish. False: on error

Usage

$result = WC_Shortcode_My_Account::retrieve_password();

WC_Shortcode_My_Account::retrieve_password() code WC 9.4.2

public static function retrieve_password() {
	$login = isset( $_POST['user_login'] ) ? sanitize_user( wp_unslash( $_POST['user_login'] ) ) : ''; // WPCS: input var ok, CSRF ok.

	if ( empty( $login ) ) {

		wc_add_notice( __( 'Enter a username or email address.', 'woocommerce' ), 'error' );

		return false;

	} else {
		// Check on username first, as customers can use emails as usernames.
		$user_data = get_user_by( 'login', $login );
	}

	// If no user found, check if it login is email and lookup user based on email.
	if ( ! $user_data && is_email( $login ) && apply_filters( 'woocommerce_get_username_from_email', true ) ) {
		$user_data = get_user_by( 'email', $login );
	}

	$errors = new WP_Error();

	do_action( 'lostpassword_post', $errors, $user_data );

	if ( $errors->get_error_code() ) {
		wc_add_notice( $errors->get_error_message(), 'error' );

		return false;
	}

	if ( ! $user_data ) {
		wc_add_notice( __( 'Invalid username or email.', 'woocommerce' ), 'error' );

		return false;
	}

	if ( is_multisite() && ! is_user_member_of_blog( $user_data->ID, get_current_blog_id() ) ) {
		wc_add_notice( __( 'Invalid username or email.', 'woocommerce' ), 'error' );

		return false;
	}

	// Redefining user_login ensures we return the right case in the email.
	$user_login = $user_data->user_login;

	do_action( 'retrieve_password', $user_login );

	$allow = apply_filters( 'allow_password_reset', true, $user_data->ID );

	if ( ! $allow ) {

		wc_add_notice( __( 'Password reset is not allowed for this user', 'woocommerce' ), 'error' );

		return false;

	} elseif ( is_wp_error( $allow ) ) {

		wc_add_notice( $allow->get_error_message(), 'error' );

		return false;
	}

	// Get password reset key (function introduced in WordPress 4.4).
	$key = get_password_reset_key( $user_data );

	// Send email notification.
	WC()->mailer(); // Load email classes.
	do_action( 'woocommerce_reset_password_notification', $user_login, $key );

	return true;
}