I need to redirect users when they click the register button to the my-account billing page. I had this working perfectly using via the code from Redirect after registration to WooCommerce "my account" edit address page answer code.
However that was when the register and login pages were on the same page, now however I've had to make a different registration page using the code:
add_shortcode( 'wc_reg_form_bbloomer', 'bbloomer_separate_registration_form' );
function bbloomer_separate_registration_form() {
if ( is_admin() ) return;
if ( is_user_logged_in() ) return;
ob_start();
// NOTE: THE FOLLOWING <FORM></FORM> IS COPIED FROM woocommerce\templates\myaccount\form-login.php
// IF WOOCOMMERCE RELEASES AN UPDATE TO THAT TEMPLATE, YOU MUST CHANGE THIS ACCORDINGLY
do_action( 'woocommerce_before_customer_login_form' );
?>
<form method="post" <?php do_action( 'woocommerce_register_form_tag' ); ?> >
<?php do_action( 'woocommerce_register_form_start' ); ?>
<?php if ( 'no' === get_option( 'woocommerce_registration_generate_username' ) ) : ?>
<p >
<label for="reg_username"><?php esc_html_e( 'Username', 'woocommerce' ); ?> <span >*</span></label>
<input type="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 >
<label for="reg_email"><?php esc_html_e( 'Email address', 'woocommerce' ); ?> <span >*</span></label>
<input type="email" name="email" id="reg_email" autocomplete="email" value="<?php echo ( ! empty( $_POST['email'] ) ) ? esc_attr( wp_unslash( $_POST['email'] ) ) : ''; ?>" /><?php // @codingStandardsIgnoreLine ?>
</p>
<?php if ( 'no' === get_option( 'woocommerce_registration_generate_password' ) ) : ?>
<p >
<label for="reg_password"><?php esc_html_e( 'Password', 'woocommerce' ); ?> <span >*</span></label>
<input type="password" 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 >
<?php wp_nonce_field( 'woocommerce-register', 'woocommerce-register-nonce' ); ?>
<button type="submit" name="register" value="<?php esc_attr_e( 'Next', 'woocommerce' ); ?>"><?php esc_html_e( 'Next', 'woocommerce' ); ?></button>
</p>
<?php do_action( 'woocommerce_register_form_end' ); ?>
</form>
<?php
return ob_get_clean();
}
Source: WooCommerce: Separate Login and Registration Pages
This now redirects me to a 404 of
register-now/edit-address/billing/
And I need it to redirect me to
my-account/edit-address/billing/
CodePudding user response:
You should replace the code from the woocommerce_registration_redirect filter hook with:
function filter_woocommerce_registration_redirect( $redirect ) {
return get_permalink( get_option( 'woocommerce_myaccount_page_id') ) . 'edit-address/billing';
}
add_filter( 'woocommerce_registration_redirect', 'filter_woocommerce_registration_redirect', 10, 1 );
See: get_permalink( int|WP_Post $post, bool $leavename = false ) - Retrieves the full permalink for the current post or post ID
