2012-02-02 15 views
1

我使用wordpress並在functions.php中創建了一個cookie。通過functions.php的WordPress的曲奇不讀取cookie,直到頁面重新加載?

我的問題是,它在創建時這個cookie不是由模板/頁閱讀,但是,這是第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 2012-02-02 21:03:44

+0

請參閱上面的代碼....這就是我試過,但不能打電話是從我的主頁返回 – Satch3000 2012-02-02 21:11:52

+0

您能詳細說明一下嗎? – Satch3000 2012-02-02 21:22:28

回答

1

嘗試從index.php文件設置cookie。這是您啓動網站時運行的第一個文件,因此,在您進入主頁面時,應該可以使用該cookie。

+0

WordPress的將只允許我這樣就設置functions.php的餅乾,因爲我知道我不能做到這一點 – Satch3000 2012-02-02 21:33:53

+0

其開源,你可以做你想做的吧,如果得到一個錯誤都必須有一個錯誤的碼。 (不要使用WordPress的功能,創建你自己的) – Paul 2012-02-02 21:39:09

+0

我的意思是,wordpress不會在functions.php之外創建cookie ......我試過了,它不起作用。 – Satch3000 2012-02-02 21:41:56

2

這是由設計。使用PHP創建cookie時,它不會設置在$ _COOKIE中找到的超級全局。 Cookie頭已發送,但cookie已設置。

的$ _COOKIE,另一方面超全球通過其初始頁面請求從瀏覽器發送的所有cookie設置在頁面加載。

所以當你設置一個cookie並將它發送到瀏覽器並保存在客戶端時,瀏覽器發送給服務器的下一個請求也會沿着這個先前保存的cookie發送,這會將$ _COOKIE超級全局。

如果要保存對cookie服務器端所做的更改,可以創建一個存儲原始cookie的類,然後在通過類的cookie更改方法更改cookie時修改它們,然後使用相同的類檢索任何cookie數據,或者您可以在使用PHP設置實際cookie的同時自行修改$ _COOKIE超級全局。

2

我喜歡我的搜索條件保存cookies來幫助防止問題當用戶嘗試背出一個頁面,並得到了「你想重新提交?」消息,所以我把我的cookies類似下面,它允許我使用他們的第一頁負載:

// 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']); 
相關問題