2015-11-12 54 views
0

我正在寫一個插件,我在哪裏設置cookie。當我使用php方法設置cookie時,它顯示警告。餅乾不通過wordpress插件代碼設置

警告:不能更改頭信息 - 已經 (輸出發送頭開始在

如果我使用WordPress的動作,設定的cookie它不工作我有我的主題功能,使用此功能。 PHP文件它工作正常,但在插件代碼不工作

下面是代碼示例:

使用PHP方法

setcookie('sm_js_cookie', 1, time()+3600*24*100,'/'); 

使用wordpres行動:

function set_newuser_cookie() { 

    setcookie('sm_js_cookie', $_SERVER['REMOTE_ADDR'], time()+3600*24*100,'/'); 

} 

add_action('init', 'set_newuser_cookie'); 

請幫我找到了解決辦法。

+0

你能刪除你的緩存和cookies並重試嗎? – cgee

+0

@cgee你能告訴我,從哪裏我可以刪除緩存和餅乾。 –

+0

從您的瀏覽器中刪除您的緩存和餅乾..你可以谷歌它..「Firefox刪除cookies」什麼的。 – cgee

回答

0

經過反覆的評論,事實證明,你正試圖從短代碼中調用setcookie(你應該在你的問題中提到過)。

這通常不起作用,因爲在解析短代碼時,某些輸出已發送到瀏覽器,因此您不能使用setcookie函數。

您已經計算出的替代方法是在init操作的回調函數中使用setcookie。但是,您通常可以一路鉤到template_redirect(我相信這是最後一個,或者您可以用於發送標頭的最後一個操作之一)。你能指定你想要達到的目標,以便我能給你適當的建議嗎?

沒有任何額外的細節,我可以給你關於如何根據用戶當前正在查看的頁面/帖子上是否存在短代碼來設置cookie的示例。

<?php 
function set_newuser_cookie(){ 
    // Check to see if we're looking at a single post, page or attachment 
    if (is_singular()) { 
     $_post = get_post(); 
     // See if the content of the current post object has the shortcode 
     if (has_shortcode($_post->post_content, 'js_conditions_script')) { 
      setcookie('sm_js_cookie', 1, time()+3600*24*100,'/'); 
     } 
    } 
} 
add_action('template_redirect', 'set_newuser_cookie'); 

我們做的是,我們勾到template_redirect行動(主要WordPress的語句已經執行,所以我們知道我們在看什麼網頁)。我們檢查以確保我們正在查看單個帖子(包括自定義帖子類型),頁面或附件,然後檢查它是否包含簡碼[js_conditions_script]。如果是這樣,我們設置cookie。