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; }