Cookie不是通过wordpress插件代码设置的

时间:2015-11-12 12:43:33

标签: php wordpress cookies wordpress-plugin

我正在写一个插件,我正在设置一个cookie。当我使用php方法设置cookie时,它会显示警告。

  

警告:无法修改标头信息 - 已发送的标头   (输出开始于

如果我使用wordpress操作,设置cookie不起作用。我在我的主题functions.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');

请帮我找到解决方案。

1 个答案:

答案 0 :(得分:2)

在评论中来回反复,结果是你试图从短代码中调用setcookie(你应该在你的问题中提到过)。

这通常不起作用,因为在解析短代码时,某些输出已发送到浏览器,因此您无法使用setcookie函数。

您已经发现的替代方法是在setcookie操作的回调函数中使用init。但是,您通常可以一直挂到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。