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

前端 未结 4 1357
刺人心
刺人心 2021-01-01 01:41

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 pa

相关标签:
4条回答
  • 2021-01-01 01:49

    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);
    
    0 讨论(0)
  • 2021-01-01 01:51

    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);
    
    0 讨论(0)
  • 2021-01-01 02:02

    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' );
    
    0 讨论(0)
  • 2021-01-01 02:07

    You can do this using cookie,

    function.php

    setcookie('afterRegister', null, -1, '/');
    function user_autologout(){
       if ( is_user_logged_in() ) {
          wp_logout();
          setcookie("afterRegister", "afterRegister", time() + (86400 * 30), "/");
          return get_permalink(woocommerce_get_page_id('myaccount'));
    
       }
    }
    add_filter('woocommerce_registration_redirect', 'user_autologout', 2);
    

    page-my-account.php

    <?php if(isset($_COOKIE["afterRegister"]) && !empty($_COOKIE["afterRegister"]) ) {?>
    <div class="woocommerce-message" role="alert">
    Your account has been created successfully, Please login using the auto generated password we've sent on your email address</div>
    <?php }
    
    0 讨论(0)
提交回复
热议问题