0

我创建了一个双语言网站,其表单在提交时会保存一个 cookie,然后每个页面都会检查 cookie 以查看要加载的语言。

我遇到的问题是提交按钮需要按两次才能加载页面并切换语言。

这是我的表格:

<form action="<?php the_permalink(); ?>" name="region" method="post">
   <input type="submit" name="region" value="English" id="en-button" />
   <input type="submit" name="region" value="Cymraeg" id="cy-button" />
</form>

这是在我的functions.php文件中保存cookie:

function set_region_cookie()
{
    if(isset($_POST['region']))
    {
        // Set Cookie
        setcookie('region', $_POST['region'], time()+1209600);
        // Reload the current page so that the cookie is sent with the request
        header('Region: '.$_SERVER['REQUEST_URI']);
    }
}
add_action('init', 'set_region_cookie');

这就是我在每个内容区域周围加载不同内容的内容:

<?php $language = $_COOKIE["region"];
if ($language == "English") { ?>
    <?php echo the_field('english_content'); ?>
<?php } else { ?>
    <?php echo the_field('welsh_content'); ?>
<?php } ?>

语言正确切换,但仅当您单击提交按钮两次时。

4

2 回答 2

3

事实证明,问题的出现是由于 cookie 的工作方式,在这个问题中找到了以下(重要)信息:

cookie 的工作方式如下:

  1. 你提出请求
  2. 服务器将 cookie 标头发送回客户端
  3. 页面加载 - 在此页面加载时 Cookie 对 PHP 不可见
  4. 刷新
  5. 客户端向服务器发送 cookie 标头
  6. 服务器收到 cookie 标头,因此 PHP 可以读取它
  7. 页面加载 - Cookie 在此处可见。

一开始我并没有真正注意到,但问题中实际上有一行代码来处理刷新页面以便服务器接收 cookie:-

// Reload the current page so that the cookie is sent with the request
header('Region: '.$_SERVER['REQUEST_URI']);

将其更改为:

// Reload the current page so that the cookie is sent with the request
header('Location: '.$_SERVER['REQUEST_URI']);
于 2012-10-01T15:13:35.977 回答
0

尝试改用选择字段。浏览器可能只是因为有两个提交按钮而吓坏了。然后你可以做一些类似document.getElementById('theSelectMenu').onchange = function(){ document.getElementById('theForm').submit(); }或更好的事情,但使用 jQuery。

于 2012-09-19T08:43:31.720 回答