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

时间:2017-08-18 19:53:35

标签: wordpress api cookies transient

我已搜索过,无法找到答案。

我们正在使用的网站中有代码,用户在登录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");
     }
}
}

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

希望这可以帮助将来可能需要它的人!