本教程详细阐述了如何为WooCommerce的“我的账户”页面及其自定义端点设置强大的重定向规则,以防止未登录用户访问。文章将介绍如何通过优化WordPress的`template_redirect`钩子,结合`is_user_logged_in()`和全局`$wp`对象,精确控制重定向逻辑,同时保留“忘记密码”等特定页面的可访问性,并提供登出后自动重定向的实现方法。
在WooCommerce商店中,"我的账户"页面是用户管理订单、地址和个人信息的核心区域。为了提升用户体验和安全性,有时我们需要限制未登录用户访问此页面及其子页面(即自定义端点),并将其重定向到网站首页或其他指定页面。然而,简单的重定向规则可能无法完全覆盖所有自定义端点,导致未登录用户仍能通过直接访问URL来查看某些不应公开的内容。本教程将深入探讨如何构建一个健壮的重定向机制,确保所有受保护的端点都能正确地将未登录用户重定向。
在深入重定向逻辑之前,了解WooCommerce自定义端点的工作原理至关重要。自定义端点允许开发者在“我的账户”页面下创建新的选项卡和内容区域,例如“我的退货”、“我的收藏”等。创建这些端点通常涉及以下几个步骤:
例如,创建一个名为my_returns的自定义端点,其URL结构通常是你的域名/my-account/my_returns。
最初的重定向尝试可能只关注了主“我的账户”页面,代码示例如下:
add_action( 'template_redirect', 'wish_custom_redirect' );
function wish_custom_redirect() {
global $wp;
if (
!is_user_logged_in()
&&
('my-account' == $wp->request)
&&
('lost-password' != $wp->request)
)
{
wp_redirect( home_url() );
exit;
}
}这段代码的逻辑是:如果用户未登录(!is_user_logged_in())并且当前请求是my-account页面('my-account' == $wp->request)并且不是lost-password页面,则重定向到首页。
问题所在: 当用户尝试访问自定义端点,例如my-account/my_returns时,$wp->request的值将是my-account/my_returns,而不是简单的my-account。因此,('my-account' == $wp->request)这个条件将为false,导致整个if语句的条件不满足,重定向就不会触发。
尝试将自定义端点直接添加到&&条件中,例如&& ('my-account/my_returns' == $wp->request),也是不正确的。因为$wp->request在一个请求中只能有一个值,它不可能是my-account同时也是my-account/my_returns。
要正确地处理自定义端点,我们需要使用逻辑或(||)运算符,将所有需要重定向的页面路径包含在一个条件组中。这样,只要用户未登录,并且请求路径是“我的账户”主页或任何一个自定义端点,重定向就会发生。
以下是优化后的重定向代码:
add_action('template_redirect', 'wish_custom_redirect_extended');
function wish_custom_redirect_extended()
{
global $wp; // 使用全局 $wp 对象获取当前请求路径
// 定义一个数组,包含所有需要重定向的端点路径
$protected_endpoints = array(
'my-account', // 我的账户主页
'my-account/my_returns', // 示例自定义端点
// 如果有更多自定义端点,请在此处添加,例如:
// 'my-account/another-custom-endpoint',
// 'my-account/my_wishlist',
);
// 检查当前请求是否在受保护的端点列表中
$is_protected_endpoint = in_array($wp->request, $protected_endpoints);
// 组合重定向条件
if (
!is_user_logged_in() // 条件1:用户未登录
&&
$is_protected_endpoint // 条件2:当前请求是受保护的端点之一
&&
('lost-password' != $wp->request) // 条件3:当前请求不是“忘记密码”页面
) {
// 执行安全重定向到网站主页
wp_safe_redirect(site_url());
exit; // 终止脚本执行
}
}代码解析:
要添加更多的自定义端点到重定向规则中,只需修改$protected_endpoints数组:
// ... (函数开头部分不变)
$protected_endpoints = array(
'my-account',
'my-account/my_returns',
'my-account/my_wishlist', // 新增的自定义端点
'my-account/my_subscriptions', // 另一个新增的自定义端点
);
// ... (函数其余部分不变)通过这种方式,无论有多少自定义端点,都可以轻松地将其纳入重定向规则中。
除了防止未登录用户访问,我们通常也希望用户在登出后自动重定向到网站首页,而不是停留在“我的账户”页面或其任何子页面。这可以通过wp_logout动作钩子实现:
add_action('wp_logout','auto_redirect_after_logout');
function auto_redirect_after_logout(){
wp_safe_redirect( home_url() ); // 使用 wp_safe_redirect 更安全
exit();
}这段代码会在用户完成登出操作后立即触发,并将其重定向到网站的首页。
通过本教程中介绍的增强型重定向策略,您可以有效地保护WooCommerce“我的账户”页面及其所有自定义端点,确保只有登录用户才能访问这些敏感区域。结合登出后的自动重定向,可以显著提升网站的用户体验和安全性。记住,清晰的逻辑、模块化的代码以及彻底的测试是实现可靠重定向的关键。
# php
# word
# go
# wordpress
# 开发环境
# red
# 运算符
# if
# var
# 对象
相关文章:
如何快速生成可下载的建站源码工具?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
Swift中swift中的switch 语句
建站之星如何实现五合一智能建站与营销推广?
盐城做公司网站,江苏电子版退休证办理流程?
制作网站的基本流程,设计网站的软件是什么?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
宝塔面板如何快速创建新站点?
如何通过多用户协作模板快速搭建高效企业网站?
如何通过西部数码建站助手快速创建专业网站?
建站之星如何配置系统实现高效建站?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
已有域名和空间,如何快速搭建网站?
如何在橙子建站上传落地页?操作指南详解
如何正确选择百度移动适配建站域名?
如何在云服务器上快速搭建个人网站?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
红河网站制作公司,红河事业单位身份证如何上传?
建站之星北京办公室:智能建站系统与小程序生成方案解析
如何快速生成ASP一键建站模板并优化安全性?
建站主机选购指南与交易推荐:核心配置解析
网站制作壁纸教程视频,电脑壁纸网站?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
香港服务器WordPress建站指南:SEO优化与高效部署策略
如何做静态网页,sublimetext3.0制作静态网页?
贸易公司网站制作流程,出口贸易网站设计怎么做?
如何通过网站建站时间优化SEO与用户体验?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
济南网站建设制作公司,室内设计网站一般都有哪些功能?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
如何在服务器上配置二级域名建站?
实现虚拟支付需哪些建站技术支撑?
Android滚轮选择时间控件使用详解
建站主机选虚拟主机还是云服务器更好?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
南平网站制作公司,2025年南平市事业单位报名时间?
黑客如何利用漏洞与弱口令入侵网站服务器?
如何实现建站之星域名转发设置?
c# await 一个已经完成的Task会发生什么
宝塔建站无法访问?如何排查配置与端口问题?
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
南京网站制作费用,南京远驱官方网站?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
*请认真填写需求信息,我们会在24小时内与您取得联系。