提交需要按两次的按钮才能加载页面

时间:2012-09-19 08:39:47

标签: php html wordpress cookies

我创建了一个双语网站,其中包含一个表单,当提交时会保存一个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 } ?>

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

2 个答案:

答案 0 :(得分:3)

事实证明问题是由于Cookie的工作方式而产生的,发现了以下(重要)信息in this question

  

Cookie的工作方式如下:

     
      
  1. 您提出请求
  2.   
  3. 服务器SENDS cookie标头返回客户端
  4.   
  5. 页面加载 - 此页面上的PHP不显示Cookie
  6.   
  7. 刷新
  8.   
  9. 客户端SENDS Cookie标头到服务器
  10.   
  11. 服务器RECEIVES cookie标头,因此PHP可以读取它
  12.   
  13. 页面加载 - Cookie在此处可见。
  14.   

我一开始并没有真正注意到,但问题中实际上有一行代码来处理刷新页面以便服务器收到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。