未登录用户 Woocommerce,重定向
Posted
技术标签:
【中文标题】未登录用户 Woocommerce,重定向【英文标题】:Non logged in users Woocommerce, redirection 【发布时间】:2017-02-04 22:49:26 【问题描述】:我正在使用 Woocommerce 在线商店,我的客户问我他不希望人们能够注册,他将为他的每个客户创建一个用户和密码。这样他就可以控制谁在他的商店购物。
所以我进入 Woocommerce 并在结帐时和任何地方禁用注册,以及允许客人下订单的选项。一切正常,除了当有人尝试下订单时,当他注销时,当他尝试去结帐页面时,它只显示一条未格式化的消息,上面写着“您必须登录才能下订单”。尝试访问结帐时,有没有办法可以将未登录的客户重定向到登录页面?
【问题讨论】:
【参考方案1】:我自己做到了!但是,如果有人有更简洁的代码可以这样做,我愿意接受建议。
我所做的是将以下代码粘贴到子主题的functions.php文件中:
add_action('template_redirect','check_if_logged_in');
function check_if_logged_in()
if(!is_user_logged_in() && is_checkout())
$url = add_query_arg(
'redirect_to',
get_permalink($pagid),
site_url('/my-account/')
);
wp_redirect($url);
exit;
谢谢 亲切的问候
【讨论】:
如果您要使用上面的代码,请记住将 /my-account/ 更改为您的登录页面。【参考方案2】:在functions.php中使用以下代码
add_action( 'template_redirect', 'redirect_user_to_login_page' );
function redirect_user_to_login_page()
// Make sure your checkout page slug is correct
if( is_page('checkout') )
if( !is_user_logged_in() )
// Make sure your login page slug is correct in below line
wp_redirect('/my-account/');
【讨论】:
你的代码和我的有什么区别??只是好奇 没什么大不了的。我刚刚发布了我的答案,却没有意识到您已经有了解决方案。我猜只有它更干净,但你的也很完美。我不知道我是否应该删除我的答案。 我使用了你的代码,但它崩溃了 XD 所以..要么我粘贴错了,要么你的代码有问题 XD 好的。我在本地服务器上进行了同样的测试,它工作正常。所以不知道为什么它会撞到你的身上。此外,第一个条件确保您在结帐页面上。因此,如果您的结帐页面有任何不同,仍然没有机会。如果您只是想尝试,请尝试在您的版本中使用退出语句,就像 u didi 一样。 这可能是因为我安装的 wordpress 在服务器的子文件夹下。但是...如果您将代码更改为我建议的代码,我想您可能会有一个更“通用”的代码。完整的 URL 类似于 www.testingserver.com/companyname/my-account/【参考方案3】:也许这段代码可以更紧凑、更简单、更方便:
add_action('template_redirect','check_if_logged_in');
function check_if_logged_in()
if(!is_user_logged_in() && is_checkout())
wp_redirect( get_permalink( get_option('woocommerce_myaccount_page_id') ) );
此代码在您的活动子主题(或主题)的 function.php 文件中或任何插件文件中。
此代码经过测试且功能齐全。
参考:WooCommerce login redirect based on cart
【讨论】:
以上是关于未登录用户 Woocommerce,重定向的主要内容,如果未能解决你的问题,请参考以下文章
Woocommerce 如何从模板重定向挂钩中排除 myaccount 的子页面(端点)?
Wordpress登录页面重定向到普通用户的Woocommerce我的帐户页面