2012-09-12 34 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是否存在。那就是它