ホームページ >バックエンド開発 >PHPチュートリアル >WP_Query をメインクエリとマージする
このシリーズのここまででは、WP_Query
を使用してテーマまたはプラグインで使用するカスタム クエリを作成する方法を学習しました。
ほとんどの場合、メイン クエリのパラメータとは別のまったく新しいパラメータ セットを指定して WP_Query
を使用しますが、パラメータにメイン クエリを含めたい場合はどうすればよいでしょうか?
これを行う例としては次のようなものがあります。
何度でも言いますが、メイン クエリと独自のカスタム クエリを組み合わせる機会はたくさんあります。
これを 3 つの例で示します: 1 つ目はループを使用した単純な例です。2 つ目は foreach
を使用して、3 つの投稿タイプごとに 1 つずつ複数のループを出力します。3 つ目は両方の投稿を出力します。 2 つの別個のクエリを使用してカテゴリ アーカイブのタイプを決定します。
ただし、メイン クエリと WP_Query
を組み合わせているため、現在のクエリ オブジェクトの引数を WP_Query
引数で使いやすい方法で保存する必要があります。最も簡単な方法は、変数に代入することです。
これは、WP_Query
パラメータを次のように定義する前に実行してください:
get_queried_object()
この関数は、オブジェクトが何であっても、現在クエリされているオブジェクトを返します。単一の投稿では投稿オブジェクトのみを返しますが、アーカイブではカテゴリ、タグ、用語オブジェクト、またはアーカイブに関連するオブジェクトを返します。クエリオブジェクトのIDを返します。
この $mainquery
変数を WP_Query
パラメーターで使用できます。次に、いくつかの例を見てみましょう。
Web サイトにカスタム投稿タイプを追加し、そのカスタム投稿タイプのカテゴリを有効にしているとします。各カテゴリのカテゴリ アーカイブでは、投稿を表示するのではなく、新しい投稿タイプの投稿を表示したいとします。これを product
とします。
クエリは次のようになります:
リーリー上で使用した category_name
パラメータはカテゴリ スラッグをパラメータとして受け取るため、カテゴリ スラグを出力するには変数の後に ->slug
を追加する必要があります。
これにより、現在のクエリ カテゴリを持つデータベースから product
投稿タイプの投稿を取得するクエリが得られます。 category.php
ページ テンプレートで使用できます。
注: pre_get_posts
フックを使用してメイン クエリを変更し、それを条件関数と組み合わせてカテゴリ アーカイブをチェックすることによって、この結果を達成することもできます。
次の例では、現在のカテゴリ ページからすべての投稿を出力しますが、すべてを 1 つのブロックに表示するのではなく、投稿の種類ごとに分けて表示します。
これは、CSS を使用して投稿タイプをページ上のブロックまたは列に分類したり、単に異なるリストに分離したりできることを意味します。
これを行うには、次のコードを使用できます:
リーリーこれは前に使用した $mainquery
変数を使用しますが、サイトに登録されているすべての投稿タイプを保存する $post_types
変数と $post_type
変数には、個々の投稿タイプが順番に格納されます。
最後の例は 2 番目の例と似ていますが、投稿タイプを 2 つの別々のクエリに分割し、それぞれに独自の異なるループを持たせます。これにより、各コンテンツに表示される内容をより詳細に制御できるため、商品の目玉画像を含めたり、異なるレイアウトを指定したりするなど、商品とは異なる方法で投稿を表示できます。
Web サイトで product
投稿タイプが登録され、そのカテゴリが有効になっており、同じカテゴリのブログ投稿も書いているとします。各カテゴリのアーカイブ ページで、最新の投稿 10 件を表示し、同じカテゴリ内のすべての製品のリストを表示したいとします。
これを行うには、次のようなコードを使用できます:
リーリーその後、各ループを異なる方法で記述して、投稿タイプごとに異なるデータを出力できます。
###まとめ### を使用すると、メイン クエリとは別に完全なカスタム クエリを作成できるだけでなく、現在のクエリのオブジェクトをマージして、アーカイブ ページのより強力なクエリ。 <p>上記の例は、カテゴリ、作成者、日付などの他のアーカイブ タイプを使用して実行することもできます。もっと可能性を考えられるかどうか考えてみてください! </p>
以上がWP_Query をメインクエリとマージするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。