如何使用 Transient API WordPress 正确设置时间

How To Set Time Properly With Transient API WordPress

我已经搜索过了,但找不到答案。

我们正在使用的网站中有一段代码,当用户登录 WordPress 时会设置一个 cookie。目前正在添加 cookie,但未正确设置 cookie 过期日期(从今天起 30 天)。一旦登录发生,cookie 就会出现,但日期未按预期在 cookie 中定义 30 天。

add_action( 'wp_login', 'bro_set_universal_cookie' );
function bro_set_universal_cookie() {

global $i2sdk;
$email = wp_get_current_user()->user_email;

// get infusionsoft ID
$returnFields = array('Id');    
$client_data = $i2sdk->isdk->findByEmail($email, $returnFields);    
$Infusionsoft_ID = $client_data[0]['Id'];

setcookie( 'CookieName', $Infusionsoft_ID,  30 * DAYS_IN_SECONDS, '/', 
'.websitenamehere.com');

}

add_action('wp_head','rup_check_referrer');
function rup_check_referrer() {
if(get_post_type() == "sfwd-courses"){
     if(isset($_GET['registersuccess']) && $_GET['registersuccess']==1) 
{
         $cur_url=strtok($_SERVER["REQUEST_URI"],'?');
         header("Refresh:0; url=$cur_url");
     }
}
}

查看此内容后,似乎包含 Transients API 日期的部分,该部分:

30 * DAYS_IN_SECONDS

假设是:

30 * DAY_IN_SECONDS

如此处所述:

https://codex.wordpress.org/Transients_API

但是,当更改它并从 DAYS 中删除 S 时,cookie 根本不再应用。很奇怪。

如果有人可以帮助让cookie 过期日期在30 天后过期,将不胜感激。正确代码的任何示例都将非常有帮助。我假设它与需要更改的这部分编码有关:

30 * DAYS_IN_SECONDS

只是不确定这样做的最佳方式。是否认为不使用瞬态 API 作为日期,而只是将日期写入带有 php 的 cookie 可能是更好的选择?像这样:

add_action( 'wp_login', 'bro_set_universal_cookie' );
function bro_set_universal_cookie() {

global $i2sdk;
$email = wp_get_current_user()->user_email;

// get infusionsoft ID
$returnFields = array('Id');    
$client_data = $i2sdk->isdk->findByEmail($email, $returnFields);    
$Infusionsoft_ID = $client_data[0]['Id'];

setcookie( 'CookieName', $Infusionsoft_ID,  echo date('Y-m-d', strtotime("+30 
days")), '/', '.websitenamehere.com');

}

add_action('wp_head','rup_check_referrer');
function rup_check_referrer() {
if(get_post_type() == "sfwd-courses"){
     if(isset($_GET['registersuccess']) && $_GET['registersuccess']==1) 
{
         $cur_url=strtok($_SERVER["REQUEST_URI"],'?');
         header("Refresh:0; url=$cur_url");
     }
}
}

提前感谢您提供的任何帮助!

好的,修复了这个...我使用的修复编辑是我更改了这个:

setcookie( 'CookieName', $Infusionsoft_ID,  30 * DAYS_IN_SECONDS, '/', '.websitenamehere.com');

我在做了一些研究后写的这行新代码。我意识到无论谁做了原始代码,都不应该使用瞬态 API 日期替换,只是好的 'ol PHP 日期就是答案:

setcookie( 'CookieName', $Infusionsoft_ID,  time() + (86400 * 30), '/', '.websitenamehere.com');

希望这对以后可能需要它的人有所帮助!