WooCommerce 仅通过电子邮件重置密码

WooCommerce Reset Password only by email

可以更改 form-lost-password 的方式,用户只能通过电子邮件重置密码(验证用户名如电子邮件并显示错误,当输入不是电子邮件时),我没有找到一个钩子为此。

您可以使用“lostpassword_errors”挂钩。

请检查 wp-includes/user.php

的第 2930 行
$errors = apply_filters( 'lostpassword_errors', $errors, $user_data );

因此,如果您只想通过电子邮件地址而不是用户名来重置密码,您可以使用以下代码。

add_filter( 'lostpassword_errors', 'reset_password_by_email_only', 20, 2 );

function reset_password_by_email_only( $errors, $user_data ) {
    $user_login = !empty($_POST['user_login'])?$_POST['user_login']:'';

    if ( empty( $user_login ) ) {
        $errors->add( 'empty_username', __( '<strong>Error</strong>: Please enter a username or email address.' ) );
    } elseif ( strpos( $user_login, '@' ) ) {
        $user_data = get_user_by( 'email', trim( wp_unslash( $user_login ) ) );
        if ( empty( $user_data ) ) {
            $errors->add( 'invalid_email', __( '<strong>Error</strong>: There is no account with that username or email address.' ) );
        }
    } else {
        $errors->add( 'invalid_input', __('<strong>Error</strong>: YOUR MESSAGE FOR INVALID INPUT HERE.' ) );
    }

    return $errors;
}

当用户输入的不是邮箱地址时会return出错。

希望对您有所帮助。

更新:

如果您使用的是 woocommerce,并且只想在我的帐户页面(客户区)通过电子邮件地址重置密码,则需要使用“lostpassword_post”挂钩。

    add_action( 'lostpassword_post', 'reset_password_by_email_only', 20, 2 );

function reset_password_by_email_only( $errors, $user_data ) {
    $user_login = !empty($_POST['user_login'])?$_POST['user_login']:'';

    if ( empty( $user_login ) ) {
        $errors->add( 'empty_username', __( '<strong>Error</strong>: Please enter a username or email address.' ) );
    } elseif ( strpos( $user_login, '@' ) ) {
        $user_data = get_user_by( 'email', trim( wp_unslash( $user_login ) ) );
        if ( empty( $user_data ) ) {
            $errors->add( 'invalid_email', __( '<strong>Error</strong>: There is no account with that username or email address.' ) );
        }
    } else {
        $errors->add( 'invalid_input', __('<strong>Error</strong>: YOUR MESSAGE FOR INVALID INPUT HERE.' ) );
    }
}