0

送信時にCookieを保存するフォームを使用して、2言語のWebサイトを作成しました。各ページは、Cookieをチェックして、ロードする言語を確認します。

私が抱えている問題は、ページを読み込んで言語を切り替えるために、送信ボタンを2回押す必要があることです。

これは私が持っているフォームです:

<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>

これは、Cookieを保存するためのfunctions.phpファイルにあります。

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回クリックした場合に限ります。

4

2 に答える 2

3

この問題は、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

代わりに選択フィールドを使用してみてください。送信ボタンが2つあるため、ブラウザがおかしくなっている可能性があります。次に、document.getElementById('theSelectMenu').onchange = function(){ document.getElementById('theForm').submit(); }jQueryのような、またはそれ以上のことを行うことができます。

于 2012-09-19T08:43:31.720 に答える