0

我正在创建一个 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_timeand$now变量上运行,它会显示两个不同的时间戳,除了$db_option_time时间戳与数据库中保存的不同!

在对照$now变量检查数据库中的时间戳时,差异大于 3600 秒(使用我可信赖的计算器检查时)。get_option我认为WordPress 功能出了点问题?

这是一个例子:

  • 数据库条目(在 phpMyAdmin 中检查)是1367324833
  • get_option()WordPress 函数返回1367330177(从变量上var_dump()显示)$db_option_time

似乎该get_option()函数正在从数据库中提取正确的时间戳,然后对其进行处理?

4

1 回答 1

0

您不应该为此类功能使用开关。如果my_database_key不在数据库中,它将返回false,否则它将返回一个不等于 的数字true。使用和if语句大大简化了它,因为您的逻辑主要围绕何时为数据库设置新值。

在下面的示例中...

  • 设置选项键
  • 设置$now为当前时间
  • 检查该$db_option_time值是否为绝对值false或者它与 之间是否大于或等于 3600 秒$now
  • 如果是,请将选项键设置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 );
}
于 2013-04-30T15:28:05.607 回答