WooCommerce允许用户在My Account页面登录或注册,成功后都会跳转到My Account页面。本文用一个实例介绍如何更改这个默认行为。例如要求用户必须登录才能结账时,先跳转到My Account页面完成信息认证,成功后直接跳到结账页面完成购买。

首先,修改登录/注册表单

找到woocommerce/templates/myaccount/form-login.php,拷贝到主题目录/woocommerce/myaccount/form-login.php

打开form-login.php,加入获取redirect地址的代码,位置如下所示

<?php do_action('woocommerce_before_customer_login_form'); ?>
<?php $redirect = $_REQUEST['redirect_to']; ?>

然后分别在登录和注册表单的提交按钮前加入隐藏字段,记录转向地址。

<input type="hidden" name="redirect" value="<?php echo esc_url( $redirect ) ?>" />
<input type="submit" class="button" name="login" value="<?php _e( 'Login', 'woocommerce' ); ?>" />
<input type="hidden" name="redirect" value="<?php echo esc_url( $redirect ) ?>" />
<input type="submit" class="button" name="register" value="<?php _e( 'Register', 'woocommerce' ); ?>" />

强制访问checkout的guest用户登录

在主题的functions.php中加入如下代码

add_action( 'woocommerce_before_checkout_form', 'theme_wc_redirect_guest_user' );
function theme_wc_redirect_guest_user(){
	if( !is_user_logged_in() ) {
		$checkout_url = get_permalink( woocommerce_get_page_id('checkout') );
		$args['redirect_to'] = urlencode( $checkout_url );
		$login_url = add_query_arg( $args, get_permalink( woocommerce_get_page_id('myaccount') ) );
		wp_safe_redirect($login_url);
	}
}

最后,加入注册跳转功能

登录表单只要有redirect这个隐藏字段,就能自动跳转,注册表单不行,所以在主题的functions.php中加入如下代码。

add_filter ( 'woocommerce_registration_redirect', 'theme_wc_registration_redirect' );
function theme_wc_registration_redirect( $redirect ) {
    if ( $_POST['redirect'] ) {
        $redirect = $_POST['redirect'];
    }
    return $redirect;
}

28条留言

  1. 你好,实在不好意思打扰你,我想问下有没办法使用QQ 微博这种登录WOOCOMMERCE啊?期待您的回复。

    1. 用国外社交网站登录woocommerce的插件是有的,所以实现该功能没问题,你只能找找看国内有没有类似插件。

  2. 抱歉,我是新手~~ 我的前台没有woocommerce 的login选项,怎样把登陆选项调出来呢?现在页面上只有Wordpress用户的login,这是我不需要的。

    1. 安装woocommerce时会要求安装页面。你可以去页面里找找有没有my account page,这个页面是用来登录注册的。是否允许注册在woocommerce的设置里,好好翻翻。

  3. 请问一下 我想用woo 搞个 免费下载 网络资源的站点,问题是 woo需要注册、登陆后、付款后才能下载,我想直接点下载 然后出现 下载地址,因为所有资源都是免费的,求教育~!

    1. woocommerce不需要要注册登录也可以购买,后台设置里选。问题是无论需不需要用户认证,哪怕是免费内产品,也会有结账的过程,这个你应该不需要吧?
      既然是下载站,为什么不装个管理download的插件,比如Download Monitor之类的

  4. 老大 继续来请教你了

    1.为什么默认的woocommce没看到注册页面?必须在购物车下订单的时候才看到一个输入帐号和密码的地方用来成为会员?

    2.为什么会员退出后,退出的按钮还会继续显示?这个怎么修改?

    我的网站58coupon.com

    1. WooCommerce注册方式有两种
      1. 会员中心(My Account页面)
      2. 结账的时候注册

      在my account注册需要到设置中开启,general->Allow registration on the “My Account” page

    2. 你的退出选项是一个菜单项,到菜单里删掉就行了

  5. 请教一下版主 woocommerce中的一个主题模板mystile,如何中文化主题啊 急等回复 我的q272400304

      1. 你好 这个插件已经安装被翻译了部分语言 请问如何指定那个po文件来显示呢?

  6. 请问为产品单独设置运费具体什么意思?比如产品A运费5元,B运费10元,我A和B一起买就要付15元邮费是吗?能告诉我使用这种功能的背景是什么吗?
    按照重量计费的插件是有的,http://wordpress.org/plugins/awd-weightcountry-shipping/

    1. 就是可以给每个商品设置单独的运费,现在WOOCOMMERCE里面的运费设置,是针对所有商品,10KG和100G的的商品运费是一样的,woo里面有个插件per product shipping ,但是收费的
      背景就是,如果运费不可单独设置,对商家来说会取一个较高的运费,来平衡收益,而对买家来说,买小商品却花了大商品的运费,不公平

          1. shipping class可以把产品分组,可以应用不同的运费设置,当然主要是百分比,你不嫌麻烦的话可以一个产品设置一个,跟你说的一个产品一种运费差不多。个人感觉为产品单独设置运费是在每件产品都超重,需要较多运费的情况下,卖小东西就没必要了。
            那个awd插件,不怕累的话能实现类似首重续重的功能,你写0-1kg 7元,1.1lg – 2kg 9元,顶多你把所有可能情况都写一遍就是了。国家功能应该不是强制使用的吧。

      1. 如果有收费插件,为什么不用呢?从程序员的角度讲,电商站点本来就是盈利性的,用的人也不是普通用户。程序员们有什么理由免费写插件,免费维护呢?既然做电商,就不要在网上到处搜罗代码吧,用收费的多省心。

    2. 按重量算运费,这个应该快递公司或者邮政的规则吧,有首重收费,续重收费。比如首重5公斤收费100,续重1公斤收费10
      A+B的重量如果没到首重,则按首重收费,超过了,按续重公斤数重新计算运费
      谢谢你的回复

    3. awd-weightcountry-shipping我装了,不太适合,我这里不需要分国家
      Weight based shipping for Woocommerce这个是按重量计算运费的,但设置过于简单,没有首重和续重的设置

    4. 其实按重量收邮费是我最需要的,按首重和续重,我做的澳洲直购网,运费对买家来说是一笔不小费用

      1. 首重续重这个说的通,国内很常见,但据我所知目前woocommerce没这种插件。你可以找人写一个。

        1. 我原来没写过PHP,我用别的语言。这次亲力亲为,是想学习一下,也熟悉一下WOOCOMMERCE,以后维护也方便,这样开始的成本也最低
          Weight based shipping for Woocommerce这个有个雏形,我想在这个基础上试试加上首重和续重功能,希望能得到你的指教,谢谢

    5. 另外请教下博主

      点击结帐后会显示收货地址的这个地方,填写框里面都是英文

      请问这个地方在那个文件修改能让变成中文?

      急等,如果您有Q给我最好了 我的Q272400304

      1. 你WordPress设置成繁体中文,也有繁体中文语言包,结账那里就会自动显示繁体中文。除非你下的语言包不全,那里没翻译,又或者是你主题彻底重写了结账页面,那还要去翻译主题。

  7. 好容易注册成功了,找网站名称找了半天
    首先感谢,在你这学了不少东西。希望和你多交流
    想问一下,如何给每个商品单独设置运费?WOO倒是有插件。

评论功能已关闭