web-dev-qa-db-ja.com

クエリからの投稿を保存し、後で経由してアクセスする AJAX コール

上記の質問のタイトルを明確にするために、私がやろうとしているのは私がその投稿に添付されている画像のサムネイルを表示している投稿のグリッドを作成することです。

次に、グリッド内のこれらの各画像をクリックして、グリッド項目の下にJSを介して残りの投稿のコンテンツ(カスタムフィールドデータを含む)を表示します。

私のフロントエンドのコードはすべてうまくいっています。しかし、私がやりたいのはバックエンドを設定して(最初はグリッドを作成するときに)投稿をクエリし、次に各投稿のプレビューを表示するときに、各投稿から必要な残りのフィールドをプレビューHTMLに表示して表示することです。

だからバックエンドで、私がやりたいことは次のとおりです。

  1. ページがロードされたら、投稿についてDBに問い合わせ、PHPのどこかに保存します。配列またはオブジェクト内.
  2. 投稿サムネイルのグリッドを構築するために特定のフィールドを使用します。
  3. サムネイルをクリックしたら、AJAX呼び出し(投稿IDの受け渡し)を行い、JSON経由でその投稿IDのオブジェクトの配列からフィールドを返します。
  4. プレビューHTMLにロードして表示します。

だから、そのシナリオを念頭に置いて。クエリの結果を(関数で)保存して、後でAJAXを介してそのデータにアクセスするにはどうすればよいですか。

前もってありがとう、Craig

1
BarberCraig

ページの読み込みは要求であり、ソフトウェアが実行され、応答を返して実行を終了します。後のAjaxもまた別の要求ですが、完全に分離されています。オブジェクトをリクエスト間で永続的に使用できるようにしたい場合は、2つの選択肢しかありません:use 一時API またはuse オブジェクトキャッシュAPI とキャッシュプラグインの組み合わせ(オブジェクトキャッシュAPIはデフォルトでは永続的ではありません)。

トランジェントAPIの非常に基本的な例:

if( false === ( $my_object = get_transient('transient_object_name') ) ) {

    // Build your $my_object here
    // For example
    $args= array();
    $query = new WP_Query( $args );

    $my_object = $query->get_results();

    // Store $my_object in a transient
    set_transient('transient_object_name', $my_object );
 }

その後、後でget_transient('transient_object_name')を使って以前に保存したトランジェントを取得できます。

トランジェントAPIはオブジェクトをデータベース(オプションテーブル)に格納して、新しいデータベースを呼び出すことなく後続のリクエストでオブジェクトを取得できるようにします(オブジェクトを構築するための完全な操作ではなく、トランジェントを取得するデータベース呼び出し)。

Object Cache APIはよく似ていますが、デフォルトでは永続的ではありません。キャッシュされたオブジェクトをデータベースではなくメモリに格納し、オブジェクトは現在のリクエストに対してのみキャッシュされます。別々のリクエスト間で永続化するには、W3TCのような永続キャッシュプラグインを使用する必要があります。

永続的キャッシュプラグインが利用可能な場合、一時的APIは一時的データベースへの格納を停止し、オブジェクトキャッシュAPIとまったく同じように機能し、メモリに格納しますが、メモリに格納されたデータはどちらの場合も永続的です。

1
cybmeta