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.' ) );
}
}
可以更改 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.' ) );
}
}