私はいくつかのTwitter APIデータをWordPressに保存したいです。 1時間ごとに、Twitterから新しいデータを取得し、データがAPIから正常に取得された場合にのみ更新します(場合によってはAPIでエラーが発生するため、古いデータを使用し続けます)。それで、その場合私はset_transient
またはupdate_option
を使うべきですか?
update_option
を使用した場合、少なくともオプションを更新する前に新しいデータが利用可能かどうかを確認できます。
1時間set_transient
して1時間後に新しいデータが利用できなくなった場合、どうなりますか?保存されたデータを失いますか?
一時的なものは、 wp_cron
ジョブとは異なり、設定時間が経過しても自分自身を更新しません。データにアクセスしようとすると、トランジェントが更新されます。実際には1時間ごとの更新が必要な場合は、 wp_cron
を使用する必要がありますが、実際にはそれほど問題にならないので、 wp_cron
ジョブを使用します。必要に応じてトランジェントを更新します。
しかし、尋ねられた質問に答えるために、 get_transient
を実行して一時値をチェックすると、 "一時値が存在しない、値がない、または期限切れになった場合はfalse
が返されます。 " しかし、どちらがわかりません。タイムアウトが期限切れになった場合はget_transient
を実行しても delete_option
が実行されます 。 60秒のタイムアウトテストを設定し、データベース自体で一時的なものをチェックすることで、一時的なものが実際にデータベースから削除されることを確認しました。
トランジェントは、キャッシングの点で通常のオプションよりも優れています。
また、トランジェントは本来プラグインをキャッシュすることで本質的にスピードアップしていますが、通常のオプションはそうではありません。たとえば、memcachedプラグインを使用すると、WordPressは一時的な値をデータベースではなく高速メモリに格納します。このため、期限切れが予想されるデータ、またはいつでも期限切れになる可能性があるデータを格納するためにトランジェントを使用する必要があります。
これはあなたのサイトでは特に問題にならないかもしれませんが、一般的にそれはトランジェントAPIを使用することに重要です。あなたは、しかし、失われたデータの問題について何かをする必要があります。何かのようなもの...
function get_twit_wpse_94911() {
$trans = 'test_transient';
$data = get_option('_transient_'.$trans);
if (empty($data)) {
$data = 'Yay Awesome Data'; // default data if you want it
}
if (!get_transient($trans)) {
// check for new information
// $new = fetch_Twitter_however_you_are_doing_it();
// check for the integrity of the new data
// !empty() may not be adequate
if (!empty($new)) {
$data = $new;
}
set_transient($trans,$data,60*60);
}
return get_transient($trans);
}