WooCommerce

WooCommerce”请登录”链接不工作

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页面地址的方法