如何无需身份验证限制WooCommerce店铺页面访问权限?
WooCommerce店铺页面基于HTTP_REFERER的访问限制
代码植入位置
直接将代码添加到子主题的functions.php文件中(优先用子主题,避免主题更新覆盖代码),或者创建一个简单的自定义插件。这里选用WordPress的template_redirect钩子——它会在页面模板加载前触发,刚好适合做访问拦截逻辑。
实现代码
add_action('template_redirect', 'restrict_woocommerce_via_referer'); function restrict_woocommerce_via_referer() { // 仅在WooCommerce相关页面执行拦截逻辑 if (!is_woocommerce()) { return; } // 配置允许的来源:替换成你的会员专属页面URL,以及当前站点域名(允许店铺内跳转) $allowed_referrers = array( 'https://your-domain.com/member-only-page/', // 会员页URL home_url() // 当前站点域名,确保店铺内页面跳转不受限 ); // 获取当前请求的来源地址 $current_referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; // 校验是否来自允许的来源 $is_allowed = false; if (!empty($current_referer)) { foreach ($allowed_referrers as $allowed) { if (strpos($current_referer, $allowed) !== false) { $is_allowed = true; break; } } } // 不满足条件则跳转回会员页,或直接返回403 if (!$is_allowed) { wp_redirect('https://your-domain.com/member-only-page/'); // 替换为你的会员页URL exit; // 若需要显示403页面,可替换上述两行: // wp_die('您无权访问此页面', '访问受限', array('response' => 403)); } }
关键细节说明
- 精准页面控制:如果不需要限制所有WooCommerce页面,可将
is_woocommerce()替换为更具体的条件,比如is_shop()(仅店铺首页)、is_product()(仅商品详情页)、is_product_category()(仅商品分类页)等。 - HTTP_REFERER局限性:该字段可能被浏览器隐私设置屏蔽或手动篡改,仅适合低安全性要求的场景,完全匹配你的需求。
- 店铺内跳转兼容:加入
home_url()确保用户在店铺内点击链接时不会被拦截,避免影响正常浏览流程。
内容的提问来源于stack exchange,提问作者Swifter
相关产品推荐
相关产品推荐

