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

发布于 2025-01-21 06:01:14 字数 71 浏览 1 评论 0原文

可以通过电子邮件更改用户的方式,该用户只能通过电子邮件重置密码(验证电子邮件和显示错误,当输入而不是电子邮件时),我找不到挂钩。

It is possible to change form-lost-password in the way, that user can be reset password only by email (validate username like email and show error, when input not email), I don't find a hook for this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

廻憶裏菂餘溫 2025-01-28 06:01:14

您可以使用“ Lostpassword_errors”钩。

请检查wp-rudes/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;
}

当用户输入不是电子邮件地址时,它将返回错误。

希望它能帮助您。

更新:

如果您使用的是WooCommerce,并且只想通过MyAccount页面(客户区域)上的电子邮件地址重置密码,则需要使用“ LostalSpallword_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.' ) );
    }
}

You can use "lostpassword_errors" hook.

Please check line 2930 of wp-includes/user.php

$errors = apply_filters( 'lostpassword_errors', $errors, $user_data );

So, if you want to reset password only by email address, not by username, you can use following code.

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;
}

It will return error when user input is not email address.

Hope it would help you.

UPDATE:

If you are using woocommerce and you want to reset password by email address only on myaccount page(customer area), you need to use "lostpassword_post" hook.

    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.' ) );
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文