首页 > WordPress
WooCommerce分离注册页面和登录页面
来源:TP课堂 时间:2023-04-21 点击:670

默认安装的WooCommerce登录页面和注册页面在同一个页面,如何分离?

最重要的一步就是保留WooCommerce的【我的账户】不动,俺在实验的时候,删除了这个,用了主题安装的My Accout,你别这样做,会后悔的。

剩下的就是复制粘贴了,下面一大堆粘贴到主题的functions.php,要是不知道这个文件在哪,打屁屁!

add_shortcode( 'wc_reg_form_bbloomer', 'bbloomer_separate_registration_form' );
     
 function bbloomer_separate_registration_form() {
    if ( is_user_logged_in() ) return '<p>You are already registered</p>';
    ob_start();
    do_action( 'woocommerce_before_customer_login_form' );
    $html = wc_get_template_html( 'myaccount/form-login.php' );
$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8');
$dom = new DOMDocument();
$dom->encoding = 'utf-8';
$dom->loadHTML( $html );
$xpath = new DOMXPath( $dom );
$form = $xpath->query( '//form[contains(@class,"register")]' );
$form = $form->item( 0 );
    echo $dom->saveXML( $form );
    return ob_get_clean();
 }

 /**
 * @snippet       WooCommerce User Login Shortcode
 * @how-to        Get CustomizeWoo.com FREE
 * @author        Rodolfo Melogli
 * @compatible    WooCommerce 7
 */
 
add_shortcode( 'wc_login_form_bbloomer', 'bbloomer_separate_login_form' );
 
function bbloomer_separate_login_form() {
   if ( is_user_logged_in() ) return '<p>You are already logged in</p>';
   ob_start();
   do_action( 'woocommerce_before_customer_login_form' );
   woocommerce_login_form( array( 'redirect' => wc_get_page_permalink( 'myaccount' ) ) );
   return ob_get_clean();
}

/**
 * @snippet       Redirect Login/Registration to My Account
 * @how-to        Get CustomizeWoo.com FREE
 * @author        Rodolfo Melogli
 * @compatible    WooCommerce 7
 */
 
 add_action( 'template_redirect', 'bbloomer_redirect_login_registration_if_logged_in' );
 
 function bbloomer_redirect_login_registration_if_logged_in() {
     if ( is_page() && is_user_logged_in() && ( has_shortcode( get_the_content(), 'wc_login_form_bbloomer' ) || has_shortcode( get_the_content(), 'wc_reg_form_bbloomer' ) ) ) {
         wp_safe_redirect( wc_get_page_permalink( 'myaccount' ) );
         exit;
     }
 }


然后呢,建立登录注册页面,分别粘贴短代码就完了:

在注册页面上使用 [wc_reg_form_bbloomer] 短代码

在登录页面上使用 [wc_login_form_bbloomer] 短代码




用户注册后如何能够自动登录,而不是再登录一遍?


  // 用户注册成功后自动登录
  function auto_login_new_user($user_id){
    wp_set_current_user($user_id);
    wp_set_auth_cookie($user_id);

    // 设置调转页面
    wp_redirect('/');
    exit;
}
add_action('user_register','auto_login_new_user');