0

WordPress プラグインを作成していますが、UNIX タイムスタンプをデータベースに保存し、1 時間以上経過した場合に DB エントリを更新したいと考えています。

ここに私のプラグインからのコードスニペットがあります:

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()すると、タイムスタンプがデータベースに保存されているものと異なることを除いて、2 つの異なるタイムスタンプが表示されます。$db_option_time$now$db_option_time

変数に対してデータベースのタイムスタンプを確認する$nowと、3600 秒を超える差があります (私の信頼できる計算機で確認した場合)。get_optionWordPress の機能に問題があると思いますか?

次に例を示します。

  • データベース エントリ (phpMyAdmin で確認) は1367324833 です
  • get_option()WordPress 関数は1367330177を返します(変数で示されvar_dump()ているように$db_option_time)

get_option()関数がデータベースから正しいタイムスタンプを取得し、それに何かをしているように見えますか?

4

1 に答える 1

0

このタイプの機能にはスイッチを使用しないでください。my_database_keyがデータベースにない場合は返されますfalseが、それ以外の場合は と等しくない数値が返されtrueます。ifデータベースに新しい値を設定するタイミングがロジックの大部分であるため、and ステートメントを使用すると大幅に簡素化されます。

以下の例では...

  • オプションキーを設定する
  • $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 に答える