2012-02-02 15 views
1

私はwordpressを使用しており、functions.phpにクッキーを作成しています。ワードプレスはfunctions.php経由でページを再読み込みするまでクッキーを読みませんか?

私の問題は、このクッキーはテンプレート/ページが作成されたときに読み取られないが、2ページ目の読み込み時に読み込まれるということです。

これは回避策がありますので、作成時にそのCookieを読むことができますか?

ここに私の現在のコードはのfunctions.phpである:

<?php 
function my_cookie() { 
$myvalue = 'hello'; 
if (!isset($_COOKIE['myCookie'])) { 
    setcookie("myCookie", $myvalue, time()+3600, "/", ".mydomain.com"); 
global $myglobal; 
$_COOKIE['myCookie'] = $myglobal; 

} 
} 
add_action('init', 'my_cookie'); 
?> 
+0

直接同じデータを渡す試しを設定すると '$ _COOKIE'になります。あなたは '$ _COOKIE'を使ってページリロードせずにアクセスすることができます。その後のロードでは、それはそこにあります。 – MetalFrog

+0

上記のコードを見てください....それは私が試したものの、私のメインページから戻ってくるものではありません – Satch3000

+0

詳細を教えてください。 – Satch3000

答えて

1

は、ファイルのindex.phpからクッキーを設定してみてください。これは、サイトを開始したときに実行される最初のファイルであるため、メインページにアクセスするまでにCookieが利用可能になります。

+0

Wordpressは、私がこれを行うことができないことを知っている限り、Functions.phpのクッキーを設定することを許可します。 – Satch3000

+0

オープンソース、あなたが望むことはできます。コード。 (WordPressの機能を使用しないで、自分で作成する) – Paul

+0

私は、wordpressはfunctions.phpの外部にクッキーを作成しないということです...私は試しましたが、うまくいかないでしょう。 – Satch3000

2

これは仕様です。 PHPを使用してクッキーを作成する場合、$ _COOKIEにあるスーパーグローバルも設定されません。 Cookieヘッダーは送信されましたが、Cookieは設定されています。

一方、$ _COOKIEスーパーグローバルは、最初のページリクエストでブラウザから送信されたクッキーによってページロード時に設定されます。

したがって、クッキーを設定してブラウザに送信してクライアント側に保存すると、ブラウザがサーバーに送信する次のリクエストでも、以前に保存したクッキーが送信され、$ _COOKIE super global 。

クッキーサーバー側の変更を保存する場合は、元のクッキーを格納しているクラスを作成し、そのクッキーを変更するメソッドを使用してクッキーを変更したときにクラスを変更し、クッキーデータを取得するか、PHPで実際のクッキーを設定すると同時に$ _COOKIEスーパーグローバルを変更することができます。

2

私は検索条件をクッキーに保存して、ユーザーがページから脱出しようとしたときに問題を起こさないようにしたいのですが、「再送信しますか?メッセージので、私は私が最初のページの負荷にそれらを使用することを可能にするには、次のように私のクッキーを設定します。

// Set cookie of posted values 
add_action('init', 'set_new_cookie'); 

function set_new_cookie() 
{ 
    $COOKIE_NAME = 'my_cookie_name'; 

    $name  = $COOKIE_NAME; 
    $expire = LIFETIME; 
    $path  = COOKIEPATH; 
    $domain = COOKIEDOMAIN; 
    $secure = false; 
    $httponly = false; 

    if ($_POST) 
    { 
     $POST = array(
      'variable1' => $_POST['variable1'], 
      'variable2' => $_POST['variable2'], 
      'variable3' => $_POST['variable3'], 
      'variable4' => $_POST['variable4'] 
     ); 

     foreach($POST AS $key => $value) 
     { 
      // Set the cookie 
      setcookie($name."[$key]", $value, $expire, $path, $domain, $secure, $httponly); 

      // Set the $_COOKIE global to have access to value on first page load 
      $_COOKIE[$name][$key] = $value; 
     } 
    } 
} 

あなたは、その後にimediateアクセス持つことができます。

print_r(@$_COOKIE['my_cookie_name']); 
関連する問題