我正在创建一个WordPress插件,我想要它做的是在数据库中存储UNIX时间戳,然后在一小时或更长时间后更新数据库条目。
以下是我的插件中的代码段:
const DB_TIME = 'my_database_key';
$db_option_time = get_option ( DB_TIME );
$now = time();
switch ( $db_option_time ) {
case false:
update_option ( DB_TIME, $now );
break;
case true:
$time_difference = $now - $db_option_time;
if ( $time_difference >= 3600 ) {
update_option ( DB_TIME, $now );
}
break;
default:
break;
}
如果我在var_dump()
和$db_option_time
变量上运行$now
,它会向我显示两个不同的时间戳,但$db_option_time
时间戳与数据库中保存的时间戳不同! / p>
在根据$now
变量检查数据库中的时间戳时,差异大于3600秒(使用我的可靠计算器检查时)。我认为get_option
WordPress功能出了问题?
以下是一个例子:
get_option()
WordPress函数返回 1367330177 (如var_dump()
变量上$db_option_time
所示)似乎get_option()
函数正在从数据库中提取正确的时间戳然后对它做些什么?
答案 0 :(得分:0)
您不应该使用此类功能的开关。如果my_database_key
不在数据库中,它将返回false
,否则它将返回一个不等于true
的数字。使用和if
语句大大简化了,因为您的逻辑很大程度上是在为数据库设置新值时。
在下面的例子中......
$now
设置为当前时间$db_option_time
值是绝对false
,还是,如果它与$now
之间的距离大于或等于3600秒。 / LI>
my_database_key
设置为$now
代码:
const DB_TIME = 'my_database_key';
$now = time();
$db_option_time = get_option ( DB_TIME );
if ( false === $db_option_time || $now - $db_option_time >= 3600 ){
update_option ( DB_TIME, $now );
}