programing

wocommerce에 등록하고 로그인 페이지로 리디렉션할 때 자동 로그인을 방지하시겠습니까?

muds 2023. 9. 14. 00:02
반응형

wocommerce에 등록하고 로그인 페이지로 리디렉션할 때 자동 로그인을 방지하시겠습니까?

저는 woo commerce word press로 웹사이트를 설계하고 있습니다. 이 솔루션을 참조하여 로그인 및 등록 페이지를 분리했습니다.

로그인하지 않고 성공적으로 등록한 후 등록 페이지를 로그인 페이지로 리디렉션하려면 어떻게 해야 합니까?사용자는 이메일로 전송된 사용자 이름과 암호로 로그인해야 합니다.

로그인 페이지는

www.example.com/my-account/

그리고 등록페이지는

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

많은 검색 끝에 해결책을 찾았습니다.

1단계: WP 승인 사용자 추가

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_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);

아래 코드 라인은 다음 위치에 있습니다.woocommerce/includes/class-wc-form-handler.php905호선.

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

@user3518270에서 제시한 답변을 수정합니다.

아래 라인은 wocommerce에서 사용하는 필터이므로 작동하지 않습니다. 따라서 add_action() 대신 add_filter()를 사용해야 합니다.

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);

사용할 수 있습니다.woocommerce필터를 사용하여 인증을 방지합니다.

이 토막글을 함수에 추가합니다.하위 테마의 php 파일:

add_filter( 'woocommerce_registration_auth_new_customer', '__return_false' );

쿠키를 이용해서 할 수도 있고,

기능.기능

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);

페이지 마이 어카운트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 }

언급URL : https://stackoverflow.com/questions/24379214/prevent-automatic-login-when-register-in-woocommerce-and-redirect-to-login-page

반응형