Php 在woocommerce中注册并重定向到登录页面时阻止自动登录?
我用woo commerce wordpress设计了一个网站,我有单独的登录和注册页面 在未登录的情况下成功注册后,如何将注册页面重定向到登录页面。用户需要使用电子邮件发送的用户名和密码登录 我的登录页面是 www.example.com/my-account/ 注册页面是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
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' );