如何修改WordPress地理重定向函数以排除登录页等特定页面不触发跳转
修改方案
你只需要在重定向逻辑执行前新增排除页面的判定规则,匹配到指定页面时直接终止重定向即可。
修改后的完整代码
function country_geo_redirect() { // 已登录用户直接跳过重定向 if ( is_user_logged_in() ) { return; } // 新增:排除不需要重定向的页面 $excluded_paths = [ '/wp-login.php', // 默认登录页 '/wp-admin/', // 后台所有路径 // 可自行添加其他需要排除的路径,示例:'/custom-login/', '/test-page/' ]; $current_uri = $_SERVER['REQUEST_URI']; foreach ($excluded_paths as $path) { if (strpos($current_uri, $path) === 0) { return; } } // 额外适配后台其他入口的判定 if (is_admin()) { return; } // 原有重定向逻辑保持不变 $country = getenv('HTTP_GEOIP_COUNTRY_CODE'); if ( $country == "GB" ) { wp_redirect( 'https://www.website.ie', 301 ); exit; } else if ( $country == "IE" ) { wp_redirect( 'https://www.website.co.uk', 301 ); exit; } } add_action('init', 'country_geo_redirect');
代码说明
- 新增的
$excluded_paths数组可以自由配置需要跳过重定向的页面路径,支持配置目录级别的路径,配置后对应目录下的所有页面都会跳过重定向 - 使用
strpos匹配路径开头,避免登录页带参数(如wp-login.php?redirect_to=xxx)时匹配失效 - 保留了原有已登录用户不重定向的逻辑,登录成功后访问全站都不会触发重定向,不影响站点编辑操作
调试注意事项
测试阶段建议先把wp_redirect中的301永久重定向改为302临时重定向,避免301规则被浏览器缓存,导致修改代码后仍然触发旧的重定向逻辑,确认功能正常后再改回301即可
内容的提问来源于stack exchange,提问作者Blackrath
相关产品推荐
相关产品推荐

