Anonim

クイックブレイクダウン

  • query_posts –まれな場合を除いて使用しないでください
  • pre_get_posts –ページのデフォルトクエリを変更する場合に使用します
  • 新しいWP_Query –メインクエリから異なる結果を取得するために使用します
  • get_postsWP_Queryと同じ、代わりに配列形式で結果を返す
  • query_posts

    query_postsの使用は推奨されなくなりました。 あなたが達成しようとしていることを達成するためのより良い方法があります。 メインクエリを変更しようとしていますか? アクションpre_get_postsを使用して、結果をフィルタリングします(以下を参照)。 query_postsは、元のメインクエリを(既に実行された後)側にスローし、新しいメインクエリを作成します。 これは、ポストに関連するすべてのグローバル変数を置き換え、完全に新しいデータベース呼び出しをもたらします。 既存のクエリを変更するだけではいけない理由はまったくありません。 私はそれが使用されるべきいくつかのエッジケースがあると確信していますが、私の頭の上のものは考えられません。 以下のオプションのいずれかを使用してください。これらのオプションの方が適している可能性が高いためです。

    pre_get_posts

    これはフィルターです。 これにより、メインクエリがページに変更されます。 そのため、たとえば、ホームページに返される結果の数を変更したい…

関数tj_change_home_number($ query){if(is_home()){$ query-> set( 'posts_per_page'、2); 戻り; }} add_action( 'pre_get_posts'、 'tj_change_home_number');

これにより、メインクエリが変更され、ホームページ上の2つの投稿のみが返されます。

WP_Query

呼び出されるテンプレートのメインクエリは、 WP_Queryのインスタンスです。 テンプレート内のグローバルポスト変数を操作するとき、それはWP_Queryの結果です。 この使用例は多数ありますが、get_postsと同様に、関連する投稿を取得する目的で、新しいWP_Queryを宣言します。 新しいWP_Queryをループしながらthe_post()関数を実行する場合、ループ完了後に関数wp_reset_postdata()を実行してグローバルポストデータを元のメインクエリにリセットすることに注意してください。

get_posts

get_postsを使用することにより、実際には新しいWP_Queryを呼び出し、その情報を配列形式で返します。 ホームページのスライダーの投稿を返すとき、またはサイドバーで関連する投稿を呼び出すときは、通常get_postsを使用します。 WP_Queryも同様に簡単に使用できますが、グローバル投稿変数を変更せずに投稿の配列を受信するのに適した方法です。 私の見解では、最も単純で使いやすいです。 データが返された後は、配列をループするだけで関数呼び出しは不要です。

これは少しわかりにくいので、下のコメント欄で質問してください。

参照:
WP_Query
pre_get_posts
query_posts
get_posts

Wp_query vs query_posts vs get_posts vs pre_get_posts