ホームページ >バックエンド開発 >PHPチュートリアル >WP_Query をメインクエリとマージする

WP_Query をメインクエリとマージする

PHPz
PHPzオリジナル
2023-08-30 19:57:17851ブラウズ

WP_Query をメインクエリとマージする

このシリーズのここまででは、WP_Query を使用してテーマまたはプラグインで使用するカスタム クエリを作成する方法を学習しました。

ほとんどの場合、メイン クエリのパラメータとは別のまったく新しいパラメータ セットを指定して WP_Query を使用しますが、パラメータにメイン クエリを含めたい場合はどうすればよいでしょうか?

これを行う例としては次のようなものがあります。

  • カテゴリまたはカテゴリ ページでは、1 つの投稿タイプの投稿のみを表示します
  • カテゴリ ページでは、現在のカテゴリと他のカテゴリ、タグ、または分類用語を含む投稿を表示します
  • 投稿タイプのページでは、特定のメタデータを持つ投稿のみを表示します

何度でも言いますが、メイン クエリと独自のカスタム クエリを組み合わせる機会はたくさんあります。

これを 3 つの例で示します: 1 つ目はループを使用した単純な例です。2 つ目は foreach を使用して、3 つの投稿タイプごとに 1 つずつ複数のループを出力します。3 つ目は両方の投稿を出力します。 2 つの別個のクエリを使用してカテゴリ アーカイブのタイプを決定します。

メインクエリに基づいて変数を定義する

ただし、メイン クエリと WP_Query を組み合わせているため、現在のクエリ オブジェクトの引数を WP_Query 引数で使いやすい方法で保存する必要があります。最も簡単な方法は、変数に代入することです。

これは、WP_Query パラメータを次のように定義する前に実行してください:

リーリー

get_queried_object() この関数は、オブジェクトが何であっても、現在クエリされているオブジェクトを返します。単一の投稿では投稿オブジェクトのみを返しますが、アーカイブではカテゴリ、タグ、用語オブジェクト、またはアーカイブに関連するオブジェクトを返します。クエリオブジェクトのIDを返します。

この $mainquery 変数を WP_Query パラメーターで使用できます。次に、いくつかの例を見てみましょう。

例 1: カテゴリ ページに 1 つの投稿タイプのみの投稿を表示する

Web サイトにカスタム投稿タイプを追加し、そのカスタム投稿タイプのカテゴリを有効にしているとします。各カテゴリのカテゴリ アーカイブでは、投稿を表示するのではなく、新しい投稿タイプの投稿を表示したいとします。これを product とします。

クエリは次のようになります:

リーリー

上で使用した category_name パラメータはカテゴリ スラッグをパラメータとして受け取るため、カテゴリ スラグを出力するには変数の後に ->slug を追加する必要があります。

これにより、現在のクエリ カテゴリを持つデータベースから product 投稿タイプの投稿を取得するクエリが得られます。 category.php ページ テンプレートで使用できます。

注: pre_get_posts フックを使用してメイン クエリを変更し、それを条件関数と組み合わせてカテゴリ アーカイブをチェックすることによって、この結果を達成することもできます。

例 2: メイン クエリを WP_Query および foreach と組み合わせて複数のループを出力する

次の例では、現在のカテゴリ ページからすべての投稿を出力しますが、すべてを 1 つのブロックに表示するのではなく、投稿の種類ごとに分けて表示します。

これは、CSS を使用して投稿タイプをページ上のブロックまたは列に分類したり、単に異なるリストに分離したりできることを意味します。

これを行うには、次のコードを使用できます:

リーリー

これは前に使用した $mainquery 変数を使用しますが、サイトに登録されているすべての投稿タイプを保存する $post_types 変数と $post_type 変数には、個々の投稿タイプが順番に格納されます。

例 3: 2 つの投稿タイプに対する 2 つの個別のクエリ

最後の例は 2 番目の例と似ていますが、投稿タイプを 2 つの別々のクエリに分割し、それぞれに独自の異なるループを持たせます。これにより、各コンテンツに表示される内容をより詳細に制御できるため、商品の目玉画像を含めたり、異なるレイアウトを指定したりするなど、商品とは異なる方法で投稿を表示できます。

Web サイトで product 投稿タイプが登録され、そのカテゴリが有効になっており、同じカテゴリのブログ投稿も書いているとします。各カテゴリのアーカイブ ページで、最新の投稿 10 件を表示し、同じカテゴリ内のすべての製品のリストを表示したいとします。

これを行うには、次のようなコードを使用できます:

リーリー

その後、各ループを異なる方法で記述して、投稿タイプごとに異なるデータを出力できます。

###まとめ###

上記の例からわかるように、

WP_Query

を使用すると、メイン クエリとは別に完全なカスタム クエリを作成できるだけでなく、現在のクエリのオブジェクトをマージして、アーカイブ ページのより強力なクエリ。 <p>上記の例は、カテゴリ、作成者、日付などの他のアーカイブ タイプを使用して実行することもできます。もっと可能性を考えられるかどうか考えてみてください! </p>

以上がWP_Query をメインクエリとマージするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。