WooCommerce的注册表单可以出现在两个地方——我的账户页面和结算页面,有些主题会把注册表单用弹窗的方式显示。当用户用已有账户注册时,会弹出一个提示:”Error: An account is already registered with your email address. Please log in.“ Please log in是链接,点击却没有反应,这是bug吗?
目录
注册提示的问题
如下图所示,在My Account页面注册时输入了一个已存在的账户,请登录这几个字是链接,但点击后没有反应。
正常的情况
注册界面会出现在My Account页面,或者checkout页面,但理论上它可以出现在任何地方。
WooCommerce的设计:checkout页面开启注册功能,当用户下单并注册了一个已存在的账户,就出这个提示。这时,点击登录链接会打开登录表单,这是正确的做法。登录链接绑定了一段js,本身不链接到任何地方。
但当这个逻辑出现在其它页面,用户点击链接没有反应,就有些奇怪了。
修复方法
- 结算页面就保持不变。
- 我的账户页面,请登录这几个字显示为纯文字,不要链接。
- 其它页面显示为链接,并链到我的账户页面。
代码放在主题的functions.php中,链接文字可以按自己的需求写。
add_filter( 'woocommerce_registration_error_email_exists', 'sola_registration_error_email_exists_fix' );
function sola_registration_error_email_exists_fix( $message ){
$is_account_page = strpos( $_SERVER['REQUEST_URI'], 'my-account' ) !== false ? true : false;
if( !is_checkout() && !$is_account_page ){
$message = 'An account is already registered with your email address. <a href="'.wc_get_page_permalink( 'myaccount' ).'">Please log in.</a>';
}
if( $is_account_page ){
$message = 'An account is already registered with your email address. Please log in.</a>';
}
return $message;
}
这里判断是不是我的账户页面没有使用is_account_page()
函数,原因是这段提示信息是在注册过程产生的,而注册挂在在wp_loaded
action上,这时还没有根据地址解析请求,当前的page ID是未知的,所以这个函数不工作。
如果向重定向到其它WooCommerce页面,可以参考文章获取WooCommerce页面地址的方法。