web-dev-qa-db-ja.com

WordPressキャッシング - トランジェントAPIまたは "update_user_meta" Cronjob?

クエリに基づいてユーザーメタを設定しようとしています。基本的に、クエリがtrueを返す場合はこれを設定するか、そうでない場合は設定します(trueの場合は設定しないでください)。これはうまく機能しますが、問題は、現在私がEVERTYIMEを呼び出してtrueまたはfalseをチェックすることです。これは、特に、作成しているクエリのタイプにとっては悪く、不要なことです。

それで、私はこれらの要求をどのようにキャッシュするべきですか? WordPress Transient APIを使用して設定する必要がありますか、それともX時間ごとにクーロン・ジョブを実行してからその結果に基づいて "update_user_meta"を実行する必要がありますか?

私はどちらのアプローチでも少し迷っています。そのための正しい道筋についてのガイダンスが必要です。ありがとうございます。

1
Zach Reed

どちらの方法(つまり、トランジェントを使用するかcronジョブを使用する)も実行可能ですが、データセットが非常に大きい場合、またはプロセスを自動化する必要がある場合を除き、トランジェントを使用するのが大好きです。

現在のコードの多くを見なくても、実用的な例を示すことは困難です。それにもかかわらず、あなたが過渡現象の経路を通過することになった場合、私はこのようなものをお勧めします:

// Now, check to see if the value is in the cache...
if( !( $our_data = get_transient($key) ) ) {

    // If not, then we'll check the user meta...
    if( !($our_data = get_user_meta($user_id, $key, true)) ) {

        // If not there, we create it and store it.
        $our_data = 'our data';
        update_user_meta($user_id, $key, $our_data);

    } // end if

    // And we unconditionally update the cache with an expiration of 1 day
    set_transient($key, $our_data, (60 * 60 * 24) );        

} // end if

一般的に言って、上記のコードはこれをするでしょう:

  • キャッシュを調べて、値が存在するかどうかを確認してください。値が見つかった場合、他には何も実行されません。ただし、キャッシュは24時間後に期限切れになるため、最終的にを返します。

  • 値がキャッシュにない場合は、ユーザーのメタデータを確認します。もしあればそれを使います。それ以外の場合は、手動で作成してからユーザーmetaを更新します。ユーザーmetaが一度も作成されていない場合、WordPressは update_user_meta 関数を実行するときにそれを追加します。

  • 最後に、メタテーブル内のデータまたは手動で作成したものを使用して無条件にキャッシュを更新します。

上記のコードの唯一の問題は、上記の関数がそこにあるものを使用し、nullの場合にのみそれを更新するため、ユーザーmetaが決して更新されない場合です。これを軽減するために、私は期待します:

  • コードベースの他の場所にある別の関数がユーザー値を更新しています
  • 更新機能を起動するための別の条件を導入します。

例えば:

// Contrived. This could be a query, the result of another function, etc.
$user_should_be_updated = true;

if( $user_should_be_updated || !( $our_data = get_user_meta($user_id, $key, true) ) ) {
   /* Create the data, update the user */
} // end if

Mannyのコメント も良い洞察を提供するので、その特定の質問の答えも無視しないでください。

3
Tom
1
Manny Fleurmond