Php 在woocommerce中注册并重定向到登录页面时阻止自动登录?

Php 在woocommerce中注册并重定向到登录页面时阻止自动登录?,php,wordpress,login,woocommerce,Php,Wordpress,Login,Woocommerce,我用woo commerce wordpress设计了一个网站,我有单独的登录和注册页面 在未登录的情况下成功注册后,如何将注册页面重定向到登录页面。用户需要使用电子邮件发送的用户名和密码登录 我的登录页面是 www.example.com/my-account/ 注册页面是 www.example.com/my account/?action=register经过大量搜索,我找到了解决方案 步骤1:添加 步骤2:将这些代码添加到主题函数文件中 /* Stop auto login */ f

我用woo commerce wordpress设计了一个网站,我有单独的登录和注册页面

在未登录的情况下成功注册后,如何将注册页面重定向到登录页面。用户需要使用电子邮件发送的用户名和密码登录

我的登录页面是

www.example.com/my-account/

注册页面是


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

经过大量搜索,我找到了解决方案

步骤1:添加

步骤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);
/*停止自动登录*/
函数用户_autologue(){
如果(用户是否已登录){
$current_user=wp_get_current_user();
$user\u id=$current\u user->id;
$approved\u status=get\u user\u meta($user\u id,'wp approve user',true);
//如果WP Approve user plugin尚未批准该用户,请销毁cookie以终止会话并将其注销
如果($approved_status==1){
返回$redirect\uURL;
}
否则{
wp_注销();
返回get\u permalink(woocommerce\u get\u page\u id('myaccount')。“?approved=false”;
}
}
}
添加操作('woocommerce\u registration\u redirect'、'user\u autologout',2);
函数注册_消息(){
$not_approved_message='

立即发送您的注册申请!
注意:您的帐户将被保留以进行审核,在获得批准之前您将无法登录。

'; 如果(isset($_请求['approved'])){ $approved=$_请求['approved']; 如果($approved=='false')echo'

注册成功!您的帐户获得批准后将收到通知。

'; else echo$未批准的消息; } else echo$未批准的消息; } 添加操作(“在客户登录表单之前添加商业”、“注册消息”,2);
下面的代码行位于
woocommerce/includes/class wc form handler.php
第905行

wp_重定向(应用过滤器('woocommerce_registration_redirect',$redirect))

我正在更正@user3518270给出的答案

下面的行不起作用,因为它是woocommerce使用的筛选器,所以需要使用add_filter()而不是add_action()

add_action('woocommerce_registration_redirect','user_autologue',2);
/*停止自动登录*/
函数用户_autologue(){
如果(用户是否已登录){
$current_user=wp_get_current_user();
$user\u id=$current\u user->id;
$approved\u status=get\u user\u meta($user\u id,'wp approve user',true);
//如果WP Approve user plugin尚未批准该用户,请销毁cookie以终止会话并将其注销
如果($approved_status==1){
返回$redirect\uURL;
}
否则{
wp_注销();
返回get\u permalink(woocommerce\u get\u page\u id('myaccount')。“?approved=false”;
}
}
}
添加过滤器('woocommerce\u registration\u redirect'、'user\u autologout',2);
函数注册_消息(){
$not_approved_message='

立即发送您的注册申请!
注意:您的帐户将被保留以进行审核,在获得批准之前您将无法登录。

'; 如果(isset($_请求['approved'])){ $approved=$_请求['approved']; 如果($approved=='false')echo'

注册成功!您的帐户获得批准后将收到通知。

'; else echo$未批准的消息; } else echo$未批准的消息; } 添加操作(“在客户登录表单之前添加商业”、“注册消息”,2);
您可以使用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 }

您的帐户已成功创建,请使用我们在您的电子邮件地址上发送的自动生成密码登录

您可以使用
woocommerce
过滤器来阻止身份验证

将此代码段添加到子主题中的functions.php文件:

add_filter( 'woocommerce_registration_auth_new_customer', '__return_false' );

wp_重定向(应用过滤器('woocommerce_registration_redirect',$redirect))
这行代码是我从
woocommerce/includes/class wc form handler.php
第905行获得的。我对你的回答感到惊讶。如何使用add_action@MakarandMane-虽然在技术上应该使用添加过滤器是正确的,但添加操作实际上仍然有效。add_操作本质上是add_filter的包装器-它调用add_filter并返回结果。这就是为什么即使使用了add_操作,这个答案仍然有效。不管怎样,对于这样一个小小的改变,编辑答案比应用一个完全相同的全新答案要好,除了一个小细节。工作完美。谢谢
add_filter( 'woocommerce_registration_auth_new_customer', '__return_false' );