Prevent automatic login when register in woocommerce and redirect to login page?

12,543

Solution 1

After a lot of search I found the solution for this

Step1: add WP Approve User

Step2: add these code to ur theme function file

/* Stop auto login */


function user_autologout(){
       if ( is_user_logged_in() ) {
                $current_user = wp_get_current_user();
                $user_id = $current_user->ID;
                $approved_status = get_user_meta($user_id, 'wp-approve-user', true);
                //if the user hasn't been approved yet by WP Approve User plugin, destroy the cookie to kill the session and log them out
        if ( $approved_status == 1 ){
            return $redirect_url;
        }
                else{
            wp_logout();
                        return get_permalink(woocommerce_get_page_id('myaccount')) . "?approved=false";
                }
        }
}
add_action('woocommerce_registration_redirect', 'user_autologout', 2);
function registration_message(){
        $not_approved_message = '<p class="registration">Send in your registration application today!<br /> NOTE: Your account will be held for moderation and you will be unable to login until it is approved.</p>';
        if( isset($_REQUEST['approved']) ){
                $approved = $_REQUEST['approved'];
                if ($approved == 'false')  echo '<p class="registration successful">Registration successful! You will be notified upon approval of your account.</p>';
                else echo $not_approved_message;
        }
        else echo $not_approved_message;
}
add_action('woocommerce_before_customer_login_form', 'registration_message', 2);

Solution 2

Below line of code is located at woocommerce/includes/class-wc-form-handler.php line no 905.

wp_redirect( apply_filters( 'woocommerce_registration_redirect', $redirect ) );

I correcting answer given by @user3518270

Below line will not work as it is filter used by woocommerce So need to use add_filter() instead of add_action()

add_action('woocommerce_registration_redirect', 'user_autologout', 2);

/* Stop auto login */


function user_autologout(){
       if ( is_user_logged_in() ) {
                $current_user = wp_get_current_user();
                $user_id = $current_user->ID;
                $approved_status = get_user_meta($user_id, 'wp-approve-user', true);
                //if the user hasn't been approved yet by WP Approve User plugin, destroy the cookie to kill the session and log them out
        if ( $approved_status == 1 ){
            return $redirect_url;
        }
                else{
            wp_logout();
                        return get_permalink(woocommerce_get_page_id('myaccount')) . "?approved=false";
                }
        }
}
add_filter('woocommerce_registration_redirect', 'user_autologout', 2);

function registration_message(){
        $not_approved_message = '<p class="registration">Send in your registration application today!<br /> NOTE: Your account will be held for moderation and you will be unable to login until it is approved.</p>';
        if( isset($_REQUEST['approved']) ){
                $approved = $_REQUEST['approved'];
                if ($approved == 'false')  echo '<p class="registration successful">Registration successful! You will be notified upon approval of your account.</p>';
                else echo $not_approved_message;
        }
        else echo $not_approved_message;
}
add_action('woocommerce_before_customer_login_form', 'registration_message', 2);

Solution 3

You can use the woocommerce filter to prevent authentication.

Add this snippet to you functions.php file in child theme:

add_filter( 'woocommerce_registration_auth_new_customer', '__return_false' );
Share:
12,543
Lipsa
Author by

Lipsa

Updated on June 29, 2022

Comments

  • Lipsa
    Lipsa almost 2 years

    I am designing a website with woo commerce wordpress I have separate the login and register page by reference to this solution

    How can I redirect the registration page to login page after successful registration without logged in. The user need to login there with the emailed username and password.

    my login page is

    www.example.com/my-account/

    and registration page is

    www.example.com/my-account/?action=register

  • Makarand Mane
    Makarand Mane over 9 years
    wp_redirect( apply_filters( 'woocommerce_registration_redirect', $redirect ) ); This line of code I got from woocommerce/includes/class-wc-form-handler.php line no 905. I just suprised with your answer. How you can use add_action
  • butlerblog
    butlerblog almost 8 years
    @MakarandMane - while it is technically correct that this should use add_filter, add_action will actually still work. add_action is essentially a wrapper for add_filter - it calls add_filter and returns the result. That's why this answer would still work even though add_action was used. Regardless, for such a small change it would be better to edit the answer than to apply an entirely new one that is exactly the same except for that one minor detail.
  • NSukonny
    NSukonny over 4 years
    Work perfectly. Thanks!