我使用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' );
}
}
但这不起作用。有没有人知道什么是错的。是我做错了什么
答案 0 :(得分:1)
您可以创建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
/* 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