I am using woocommerce and I have created a login and register page. I am not using any plugin for this.
My issue is, I have to check and redirect to log in before checkout I refer to this code(WooCommerce check and redirect to login before checkout)
I am using the below code
add_action('template_redirect', 'check_if_logged_in');
function check_if_logged_in() {
$pageid = 10; // your checkout page id
if (!is_user_logged_in() && is_page($pageid)) {
$url = add_query_arg(
'redirect_to',
get_permalink($pagid),
site_url('/my-account/') // your my acount url
);
wp_redirect($url);
exit;
}
}
but when I click Proceed to checkout then I am getting the URL like
http://examle.com/my-account/?redirect_to=http://example.com/index.php/checkout/
Advertisement
Answer
You could do it in two steps.
If the user goes to checkout and is not logged in, he is redirected to the my-account page for login or registration.
// if the user is not logged in, return him to login before checkout
add_action('template_redirect', 'check_if_logged_in');
function check_if_logged_in() {
if ( ! is_user_logged_in() && is_checkout() ) {
$url = site_url('/my-account/');
wp_redirect( $url );
exit;
}
}
After login or registration, if the cart is not empty, the user is redirected to checkout.
// redirect to checkout after login (or registration)
add_filter( 'woocommerce_registration_redirect', 'redirect_after_login_or_registration_to_checkout_page' );
add_filter( 'woocommerce_login_redirect', 'redirect_after_login_or_registration_to_checkout_page' );
function redirect_after_login_or_registration_to_checkout_page() {
// only if the cart is not empty
if ( ! WC()->cart->is_empty() ) {
return wc_get_page_permalink( 'checkout' );
} else {
return home_url();
}
}
The code has been tested and works. Add it to your theme’s functions.php.