如何仅使用电子邮件和密码登录 WooCommerce

Ghu*_*ugu 3 php authentication wordpress woocommerce hook-woocommerce

插件名称:WooCommerce

插件\woocommerce\templates\global\form-login.php

<label for="username"><?php _e( 'Email', 'woocommerce' ); ?> <span class="required">*</span></label>
Run Code Online (Sandbox Code Playgroud)

它显示电子邮件而不是我想要的用户名或电子邮件

包括\class-wc-form-handler.php

if ( empty( $username ) ) {
    throw new Exception( '<strong>' . __( 'Error:', 'woocommerce' ) . '</strong> ' . __( 'Email is required.', 'woocommerce' ) );
}
Run Code Online (Sandbox Code Playgroud)

它显示电子邮件验证正确,但也使用用户名登录

我希望它在结帐前仅使用电子邮件和密码登录

Rau*_*pta 5

如果仔细观察 wp-content/plugins/woocommerce/includes/class-wc-form-handler.php第 878 行,有一个过滤器 woocommerce_process_login_errors,它接受验证错误、用户名和密码。所以你可以通过这个过滤器帮助覆盖它。

这是代码:

// define the woocommerce_process_login_errors callback 
function filter_woocommerce_process_login_errors($validation_error, $post_username, $post_password)
{
    //if (strpos($post_username, '@') == FALSE)
    if (!filter_var($post_username, FILTER_VALIDATE_EMAIL)) //<--recommend option
    {
        throw new Exception( '<strong>' . __( 'Error', 'woocommerce' ) . ':</strong> ' . __( 'Please Enter a Valid Email ID.', 'woocommerce' ) );
    }
    return $validation_error;
}

// add the filter 
add_filter('woocommerce_process_login_errors', 'filter_woocommerce_process_login_errors', 10, 3);
Run Code Online (Sandbox Code Playgroud)

代码位于functions.php您的活动子主题(或主题)的文件中。或者也可以在任何插件 php 文件中。
代码经过测试并且可以工作。 在 WooCommerce 2.6.X 中

希望这可以帮助!