我有一个多站点网站,有3个代表3种语言的网站。在我的网络网站上https://example.com 我有一个包含3种语言选项的页面链接到https://example.com/nl?language=nl, https://example.com/fr?language=fr 和https://example.com/en?language=en.
用户第一次访问https://example.com 我希望他们选择自己的语言,重定向到相应的子网站,并将选择存储在cookie中。下次访客前往https://example.com 他应该自动重定向到存储在cookie中的子网站。显然如果有人直接去https://example.com/nl/... 什么都不应该发生。
我尝试在函数中添加此代码。php在我的孩子主题中,但它根本不起作用。我做错了什么?
// if a cookies is set and the user is on https://example.com/, redirect to the saved language subsite
if (isset($_COOKIE[\'language\'])) {
$pagename = $_SERVER[\'REQUEST_URI\'];
if ($pagename == \'/\') {
wp_safe_redirect("https://example.com/".$_COOKIE[\'language\']);
exit;
}
}
// if the user choose a language save a cookie
if (isset($_GET["language"])) {
setcookie(\'language\', 1, time() + 1209600, "/", "https://example.com/".$_GET[\'language\']."", false); // Set the chosen language
wp_safe_redirect("https://example.com/".$_GET[\'language\']); // redirect to the chosen language
exit;
}
UPDATE这是最终有效的代码:
if (isset($_COOKIE[\'language\'])) {
$pagename = $_SERVER[\'REQUEST_URI\'];
if ($pagename == \'/\') {
wp_safe_redirect("/".$_COOKIE[\'language\']);
exit;
}
}
if (isset($_GET["language"])) {
$language = sanitize_text_field($_GET["language"]);
setcookie(\'language\', $language, time() + 1209600, "/", "example.com", false);
}
非常感谢!
做记号
最合适的回答,由SO网友:Pat J 整理而成
setcookie()
签名如下:
setcookie ( $name, $value = "", $expires = 0, $path = "", $domain = "", $secure = FALSE, $httponly = FALSE )
您正在将cookie的值设置为
1
在代码中。我怀疑你打算做一些更像
setcookie(\'language\', $_GET[\'language\'], time() + 1209600, "/", "example.com", false);
注意:这个答案没有解决安全问题,因为它相信
$_GET
数据是干净的。你应该研究一下
data sanitization.time() + 1209600 更容易阅读。你可以这样做
time() + ( 2 * WEEK_IN_SECONDS )
, 例如