2012-09-12 35 views
1

我一直在尋找整天在wordpress setcookies。在我的方式中,我發現(使用開發人員工具欄)cookie已設置,但仍然無法工作。 我有2個文件第一個包含登錄表單重定向到另一個頁面設置cookie並返回到另一個頁面,檢查它是否工作。經過測試的域名如下:blog.mydomain.com。這裏的的setcookie文件:需要正確的方法來setcookie在wordpress

<?php 
setcookie("user_name","test",time()+3600); 
?> 

和chcking餅乾這樣的:

if(isset($_COOKIE["user_name"])){ 
echo "cookie exists"; 
} 
else{ 
echo "cookie doesn't exist"; 
} 

我讀過很多話題關於這個問題,但沒有明確的答案。 在此先感謝

回答

3

這通常發生在您將輸出發送到瀏覽器後設置cookie時。要在WP中設置cookie,您應該使用'init'鉤子在init上設置cookie。

function set_username_cookie() { 
    if (!isset($_COOKIE['user_name'])) { 
     setcookie("user_name","test",time()+3600); 
    } 
} 
add_action('init', 'set_username_cookie'); 
1

另一種方法是使用PHP的ob_start();ob_end_flush();

You can find documentation on the two functions here

我解決我的問題的方式是之前和之後的打開和關閉的HTML標籤類似這樣的調用兩個功能:

<?php ob_start(); ?> 
<!DOCTYPE html> 
<html> 
    <head> 
    </head> 
<body> 
    <?php /* Wordpress loop and other tempate code here */ ?> 
</body> 
</html> 
<?php ob_end_flush(); ?> 

我也陷入了被調用一個全球問題函數使用了PHP的setcookie();,並且由於WordPress逐漸處理頁面,因此無法創建cookie,因爲頁面的標題已經發送。

PHP的輸出緩衝功能強制在WordPress處理頁面之前發送頭文件。

希望這會有所幫助。

0

很好,在WordPress使用的cookie我的最好的方法是這樣的,

function set_my_cookie() { 
global $post; 
$post_id = $post->ID; 
$cookie_name = "my_cookie"; 
$cookie_value = "my_cookie_val"; 
if (!isset($_COOKIE['my_cookie'])) { 
{ 
    setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); 
}}add_action('wp', 'set_my_cookie'); 

我用這個功能在WordPress的wp鉤setCookie方法。這樣做的主要原因是我們可能需要某個時間在當前頁面或帖子,我們無法在init鉤子上訪問,但我們可以在wp鉤子中訪問。

現在,在短代碼或其他插件/主題函數中,我們可能只需檢查cookie是否存在。那就是它