You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress GeoIP场景下PHP header重定向忽略$redirectedBefore条件问题

问题根因

你代码的核心问题有3个:

  • 没有判断当前访问的路径是否已经是德语版/de/,如果这段重定向逻辑是全局加载的,那么就算跳转到德语页,也会重复触发判断逻辑
  • setcookie()设置的Cookie无法在当前请求的$_COOKIE全局变量中读取,只有下一次浏览器发起请求时才会携带该Cookie
  • 你的Cookie取值只有固定值1,无法区分用户主动选择的语言偏好,比如用户主动切回英文站的需求无法被识别

修复方案

修改后的代码如下:

<?php
require( dirname( __FILE__ ) . '/wp-load.php' );
// 先获取当前访问的路径,避免在德语页重复跳转
$current_path = $_SERVER['REQUEST_URI'];
// 已经在德语站的情况下直接跳过逻辑
if (strpos($current_path, '/de/') === 0) {
    return;
}

$country = do_shortcode( '[geoip-country]' );
$redirectedBefore = isset($_COOKIE['langPref']);
// 如果用户主动选了英文,直接跳过跳转
if ($redirectedBefore && $_COOKIE['langPref'] == 'en') {
    return;
}

if ( $country == 'DE' && !$redirectedBefore ) {
    setcookie("langPref", "de", 0, "/");
    header("Location: /de/");
    exit;
}
// 非德国用户、或者已经有偏好的用户,默认不跳转,需要切德语可以手动点击
// 注意:用户点击切换英文按钮的逻辑里,需要加一句 setcookie("langPref", "en", 0, "/");
?>

额外注意事项

  • 你之前写的dirname( FILE )是错误的,魔术常量需要加双下划线,应该是dirname( __FILE__ ),否则会报未定义常量的错误
  • 英文站点上的「切换到德语」按钮、德语站点上的「切换到英文」按钮,点击时需要单独设置langPref的Cookie值为对应语言标识,保证用户主动选择的优先级高于地域自动判断

内容的提问来源于stack exchange,提问作者Robert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:18:03