在开发WordPress插件和主题时,我们经常需要利用cookie来存储用户状态等信息。例如,我先前开发的插件Ludou Simple Vote就是利用cookie来记录用户的投票时间,以此来实现防止重复投票的简单功能。
然而,如果你尝试在WordPress主题文件中直接使用PHP的`setcookie()`函数来发送cookie,这通常是不可行的。根据`setcookie()`的官方文档,必须在任何输出之前设置cookie。我怀疑WordPress在初始化时已经发送了输出,导致`setcookie()`无法正常工作。经过深入搜索,我在一篇国外开发者的文章中找到了解决方案:
1,在主题的`functions.php`文件中添加以下代码来设置cookie:
/** * 函数名称,setcookie的相关参数等可以自行修改 */ function set_newuser_cookie() { if (!isset($_COOKIE['sitename_newvisitor'])) { setcookie('sitename_newvisitor', 1, time()+1209600, COOKIEPATH, COOKIE_DOMAIN, false); } } add_action( 'init', 'set_newuser_cookie'); // 上面一行代码也可以改成下面一行代码 // add_action('after_setup_theme', 'set_newuser_cookie');
2,然后在需要调用cookie值的地方读取cookie
if (isset($_COOKIE['sitename_newvisitor'])) { echo 'Welcome back!'; } else { echo 'Hello new visitor!'; }
注意:在WordPress中处理时间的正确方法
在使用WordPress开发时,我们经常需要处理时间相关的功能。请注意,任何标准的PHP时间函数,如time(),返回的时间都是基于UTC+0时区的。如果你需要获取与WordPress后台设置中指定的时区相对应的时间,你可以使用以下WordPress提供的时间函数:
// 返回当地时间的格式化日期和时间 date_i18n('Y-m-d H:i:s'); // 返回当地时间的Unix时间戳 current_time('timestamp'); // 返回适用于MySQL的时间格式 current_time('mysql'); // 手动计算当地时间的Unix时间戳 time() + get_option('gmt_offset') * 3600;
因此,在设置cookie时,你可以将time()函数替换为date_i18n(‘U’)或current_time(‘timestamp’),以确保时间戳的准确性。
关于cookie失效时间的注意事项
另一个需要关注的问题是cookie的失效时间。由于服务器端和客户端的时间可能存在差异,这可能会导致cookie的实际失效时间与你预期的不一致。如果你按照上述方法设置了cookie,但无法成功获取其值,你可以尝试将cookie的失效时间设置得更长一些,以避免由于时间差异导致的问题。
@版权声明与免责声明:
本网站部分图片素材来源于网络,版权归原作者所有。我们尊重原创作者的版权,如有侵权,请及时与我们联系,我们将在第一时间删除相关内容。对于本网站上标注为原创的图片和内容,未经 [站长营地 CmsZc.com] 的事先书面同意,您不得以任何形式或方式复制、修改、传播、展示或以其他方式使用。如果您希望使用本网站上的任何原创图片或内容,请通过以下联系方式与我们联系以获取授权:
联系我们