我一直在寻找一整天如何在wordpress中设置好。以我的方式,我发现(使用开发人员工具栏)cookie已设置但仍然无法正常工作。 我有2个文件,第一个包含重定向到另一个页面的登录表单来设置cookie并返回到另一个页面以检查它是否正常工作。测试的域名是这样的:blog.mydomain.com。这是setcookie文件:
<?php
setcookie("user_name","test",time()+3600);
?>
并像这样捏饼干:
if(isset($_COOKIE["user_name"])){
echo "cookie exists";
}
else{
echo "cookie doesn't exist";
}
我已经阅读了很多关于这个问题的主题,但没有明确的答案。 提前致谢
答案 0 :(得分: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 :(得分: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。 s标头已经发送。
PHP的输出缓冲功能强制在WordPress处理页面之前发送标题。
希望这有帮助。
答案 2 :(得分:1)
好吧,我在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是否存在。多数民众赞成