woocommerce:单独的登录页面和注册页面

时间:2013-09-06 02:43:10

标签: wordpress woocommerce

我使用woocommerce插件2.0.13。在我的帐户页面上有登录和注册部分,两者都在同一页面上。我希望他们分开。我编辑form_login.php来创建两个文件:用于登录的form_login.php和用于注册的form_register.php。

我是新的form_login.php我提供了一个指向form_registration.php的链接,如下所示:

<a href="' .get_permalink(woocommerce_get_page_id('myaccount')). '?action=register"> register </a>

在我的主题的function.php中,我添加了以下代码。

/*//  Separete Login form and registration form */
    add_action('woocommerce_before_my_account','load_registration_form', 2);
    function load_registration_form(){
        if(isset($_GET['action'])=='register'){
            woocommerce_get_template( 'myaccount/form-registration.php' );
        }
    }

但这不起作用。有没有人知道什么是错的。是我做错了什么

4 个答案:

答案 0 :(得分:1)

您可以创建Woocommerce form-login.php的副本,并将其命名为form-register.phpform-login.php位于/woocommerce/templates/myaccount/文件夹中。

然后在form-login.php中,您可以使用以下代码创建指向form-register.php的链接:

<a href="' .get_permalink(woocommerce_get_page_id('myaccount')). '?action=register"> register </a>

接下来,您需要通过添加以下代码来修改主题function.php文件:

<?php
/* Separete Login form and registration form */
add_action('woocommerce_before_customer_login_form','load_registration_form', 2);
function load_registration_form(){
  if(isset($_GET['action'])=='register'){
    woocommerce_get_template( 'myaccount/form-registration.php' );
  }
}

答案 1 :(得分:1)

您创建了一个名为 form_register.php 的文件,并且正在调用 form_registration.php 。这是主要问题。

woowoo_get_template方法现在也已过时,请改用wc_get_template。

在复制form-login.php之后,请确保在form-register.php中对此行进行注释:

do_action( 'woocommerce_before_customer_login_form' ); 

否则,您将使用woocommerce_before_customer_login_form过滤器陷入无限循环。

答案 2 :(得分:1)

/* shortcode for Register */
add_shortcode( 'wc_reg_form', 'registration_form' );
            
        function registration_form() {
           if ( is_admin() ) return;
           if ( is_user_logged_in() ) return;
           ob_start();
         
           
           
         
           do_action( 'woocommerce_before_customer_login_form' );
         
           ?>
              <form method="post" class="woocommerce-form woocommerce-form-register register" <?php do_action( 'woocommerce_register_form_tag' ); ?> >
         
                 <?php do_action( 'woocommerce_register_form_start' ); ?>
         
                 <?php if ( 'no' === get_option( 'woocommerce_registration_generate_username' ) ) : ?>
         
                    <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
                       <label for="reg_username"><?php esc_html_e( 'Username', 'woocommerce' ); ?> <span class="required">*</span></label>
                       <input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="username" id="reg_username" autocomplete="username" value="<?php echo ( ! empty( $_POST['username'] ) ) ? esc_attr( wp_unslash( $_POST['username'] ) ) : ''; ?>" /><?php // @codingStandardsIgnoreLine ?>
                    </p>
         
                 <?php endif; ?>
         
                 <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
                    <label for="reg_email"><?php esc_html_e( 'Email address', 'woocommerce' ); ?> <span class="required">*</span></label>
                    <input type="email" class="woocommerce-Input woocommerce-Input--text input-text" name="email" id="reg_email" autocomplete="email" value="<?php echo ( ! empty( $_POST['email'] ) ) ? esc_attr( wp_unslash( $_POST['email'] ) ) : ''; ?>" />
                 </p>
         
                 <?php if ( 'no' === get_option( 'woocommerce_registration_generate_password' ) ) : ?>
         
                    <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
                       <label for="reg_password"><?php esc_html_e( 'Password', 'woocommerce' ); ?> <span class="required">*</span></label>
                       <input type="password" class="woocommerce-Input woocommerce-Input--text input-text" name="password" id="reg_password" autocomplete="new-password" />
                    </p>
         
                 <?php else : ?>
         
                    <p><?php esc_html_e( 'A password will be sent to your email address.', 'woocommerce' ); ?></p>
         
                 <?php endif; ?>
         
                 <?php do_action( 'woocommerce_register_form' ); ?>
         
                 <p class="woocommerce-FormRow form-row">
                    <?php wp_nonce_field( 'woocommerce-register', 'woocommerce-register-nonce' ); ?>
                    <button type="submit" class="woocommerce-Button woocommerce-button button woocommerce-form-register__submit" name="register" value="<?php esc_attr_e( 'Register', 'woocommerce' ); ?>"><?php esc_html_e( 'Register', 'woocommerce' ); ?></button>
                 </p>
         
                 <?php do_action( 'woocommerce_register_form_end' ); ?>
         
              </form>
         
           <?php
             
           return ob_get_clean();
        }
    /* login shortcode */
    add_shortcode( 'wc_login_form', 'login_form' );
      
    function login_form() {
       if ( is_admin() ) return;
       if ( is_user_logged_in() ) return; 
       ob_start();
       woocommerce_login_form( array( 'redirect' => 'https://custom.url' ) );
       return ob_get_clean();
    }

答案 3 :(得分:0)

你使用的钩子是错误的。它不会被执行,因为用户没有登录。

您应该使用woocommerce_before_customer_login_form