记住多站点网站上的语言选择

时间:2020-11-23 作者:netcult

我有一个多站点网站,有3个代表3种语言的网站。在我的网络网站上https://example.com 我有一个包含3种语言选项的页面链接到https://example.com/nl?language=nl, https://example.com/fr?language=frhttps://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);
}
非常感谢!

做记号

1 个回复
最合适的回答,由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 ), 例如