我创建了一个双语网站,其中包含一个表单,当提交时会保存一个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 } ?>
语言正确切换,但仅在您单击提交按钮两次时才会切换。
答案 0 :(得分:3)
事实证明问题是由于Cookie的工作方式而产生的,发现了以下(重要)信息in this question:
Cookie的工作方式如下:
- 您提出请求
- 服务器SENDS cookie标头返回客户端
- 页面加载 - 此页面上的PHP不显示Cookie
- 刷新
- 客户端SENDS Cookie标头到服务器
- 服务器RECEIVES cookie标头,因此PHP可以读取它
- 页面加载 - 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']);
答案 1 :(得分:0)
尝试使用选择字段。浏览器可能只是吓坏了,因为有两个提交按钮。然后你可以做document.getElementById('theSelectMenu').onchange = function(){ document.getElementById('theForm').submit(); }
或者更好的事情,但还可以使用jQuery。