5

我使用 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文件中,我添加了以下代码。

/*//  Separate 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

4 回答 4

2

您可以创建 WooCommerce 的副本form-login.php并将其命名form-register.php。位于文件夹form-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
    /* Separate 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');
      }
    }
于 2016-10-03T07:28:50.653 回答
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();
    }
于 2020-09-16T12:16:41.217 回答
1

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

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

复制您的 form-login.php 后,请务必在 form-register.php 中注释此行:

do_action( 'woocommerce_before_customer_login_form' ); 

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

于 2020-03-06T21:45:23.767 回答
0

您使用的钩子是错误的。由于用户未登录,因此不会执行。

你应该使用woocommerce_before_customer_login_form.

于 2014-06-19T10:29:42.100 回答