WordPress で WP_Query クラスを使用するには?
公開: 2024-08-09WP_Queryとは何ですか?
WP_Query
は WordPress の強力な PHP クラスで、データセットに対するカスタム クエリを構築して投稿やその他のコンテンツを取得し、ページ上にレンダリングすることができます。これは、データベースと対話し、さまざまな基準に基づいてコンテンツを取得するための柔軟かつ効率的な方法を提供します。
WP_Query についての短いメモ
WordPress が投稿、ページ、コメント、設定などのすべての Web サイト データを MySQL データベースに保存していることをご存じかもしれません。
そのため、Web サイトにアクセスした人は誰でも、すぐにこのデータベースにリクエストが送信され、画面に表示する投稿やページなど、要求されたデータが取得されます。
しかし、WP_Query を使用すると、データベースから特定の情報を取得するのに役立つクエリを作成できることを知ったら、きっと驚かれるはずです。したがって、誰かがあなたのコンテンツを検索するたびに、WordPress はこの組み込みクラスを使用します。
SQL を使用してこれらすべてのクエリを作成できることは間違いありませんが、これは非常に難しく、最も簡単な方法ではありません。一方、WP_Query ははるかに簡単です。
WP_Query は非常に便利で、カスタム クエリを作成して、訪問者が検索することなく、Web サイト上の特定のコンテンツを表示できます。
つまり、WP_Query は、開発者が複雑なコードを記述することなく、WordPress サイトに表示されるコンテンツとその外観を簡単に制御できるツールです。
WordPress で「ブログ」と呼ばれる特別なタイプのコンテンツを作成するとします。これらの「ブログ」投稿をサイトに表示するには、WP_Query を使用して特別なクエリを作成します。
// WP QUERY
$query = new WP_Query([
'post_type' => 'blog', // Type of content
'posts_per_page' => 6, // Number of posts to show
'category_name' => 'Entertainment' // Category filter
]);
要求されたクエリを表示するために、WP_Query にはループのカスタマイズに役立つショートカットと組み込み関数が用意されています。ループは、WordPress がページに投稿を表示するために使用する小さな PHP コードです。
WordPress は、WP_Query で設定した基準 (投稿の種類、投稿数、カテゴリなど) に従って各投稿を処理し、フォーマットします。
この強力なツールを使用すると、開発者は複雑なデータベース クエリを作成することなく、WordPress テーマでコンテンツを表示する方法を簡単にカスタマイズできます。
WP_Queryをどのように活用できますか?
これで、WP_Query とは何か、そしてそれが正確に何をするのかがわかりました。この強力なツールを利用できるさまざまなケースのシナリオを確認してみましょう。
1. WP_Queryでループを作成する
まず、Loop とは何かを理解する必要があります。 WordPress の一部で、応答性が高く、データから投稿データを取得し、Web サイトに表示します。これは主に、テーマのテンプレートに基づいてコンテンツがどのように見えるかを決定することに重点を置いています。
ループはウェブサイト上で何を表示できますか?
選択した設定に応じて、ループには以下が表示されます。
- カスタム投稿タイプとカスタムフィールド
- ホームページにタイトルと短い説明を掲載します
- 1 つの投稿の内容とコメント
- テンプレートタグを使用した個々のページのコンテンツ
理解を深めるために、以下に Loop の簡単な構造を示します。
基本的なループの例
<?php
if ( have_posts() ) :
while ( have_posts() ) : the_post();
// Display post content
endwhile;
endif;
?>
- ここで、
have_posts()
関数は利用可能な投稿があるかどうかを確認します。 -
while ( have_posts() ) : the_post();
: 投稿がある場合、このループは投稿ごとに実行され、そのコンテンツが表示されます。
WP_Query を使用したループのカスタマイズ
すべての投稿を表示したくない場合があります。 WP_Query を使用して、表示される内容をカスタマイズできます。
<?php
// The Query
$the_query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
echo '<ul>';
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
} else {
// No posts found
}
/* Restore original Post Data */
wp_reset_postdata();
?>
このカスタム ループの仕組み
- クエリの設定:
$the_query = new WP_Query( $args );
設定したパラメータ (投稿タイプ、カテゴリなど) に基づいてカスタム クエリを作成します。 - ループの実行:
if ( $the_query->have_posts() ) { ... }
クエリに一致する投稿があるかどうかを確認します。存在する場合は、各投稿のタイトルを一覧で表示します。 - 投稿データのリセット:
wp_reset_postdata();
カスタム ループの実行後に元の投稿データが復元されるようにします。
カスタマイズオプション
WP_Query を使用すると、次のことが可能になります。
- 特定のカテゴリ、作成者、または日付範囲からの投稿を表示します
- 特定のタグまたはカスタムフィールドを含む投稿を表示する
2. WP_Query の引数
WordPress サイトから特定の投稿を取得したい場合は、WP_Query を作成する必要があります。そのためには、次の 4 つの基本部分を含める必要があります。
- クエリ引数: WordPress にどのデータを取得するかを指示します。
- クエリ: 引数を使用してデータを取得します。
- ループ: 各投稿を処理して表示します。
- Post Data Reset : ループの実行後にデータをリセットします。
しかし、WP_Query の最も重要なコンポーネントの 1 つは、データベースから取得したい特定の投稿を抽出する役割を担う引数 (WP_Query args と呼ばれることが多い) です。
すべての投稿を表示するのではなく、引数で特定の投稿のみを表示する条件を設定することが非常に重要です。
引数の例
$args
行: ここにクエリ引数を含めます。- 構造: 特定のパラメータを配列に入れます。基本的な例を次に示します。
$args = array(
'parameter1' => 'value',
'parameter2' => 'value',
'parameter3' => 'value'
);
具体例
「WordPress エラー」タグが付いた投稿を表示したい場合は、次のようにクエリ引数を設定します。
$query = new WP_Query( array( 'tag' => 'WordPress Errors' ) );
なぜ議論が重要なのか
- 引数なし、コンテンツなし: WP_Query 引数を含めないと、WordPress はどの投稿を表示するかを認識できません。クエリはデータベースからコンテンツを取得しません。
3. WP_queryパラメータを設定する
パラメータは、WP_Query を便利かつ強力にするものです。さまざまなものが利用できるため、誰でも簡単にデータベース検索をフィルタリングできるようになりました。
たとえば、WordPress サイト上の特定の投稿を表示したい場合は、WP_Query を使用し、適切な投稿を確実に取得するためにパラメーターを設定できます。 「パラメータとは何ですか?」という別の疑問が浮かぶかもしれません。
パラメーターは、データベースからどのような投稿を取得するかを WordPress に指示する命令のようなものです。
共通パラメータの例
使用できる一般的なパラメータをいくつか示します。
- cat : 特定のカテゴリからの投稿を表示します。
- author : 1 人以上の特定の著者による投稿を表示します。
- post_status : 進行中、スケジュール済み、公開済み、または削除済みの投稿を表示します。
- orderby : 投稿者、投稿タイプ、日付などで投稿を並べ替えます。
- photos_per_page : 表示する投稿の数を設定します。
- tag : 特定のタグが付いた投稿を表示します。
- order : 投稿を昇順または降順に並べ替えます。
- post_type : 投稿、ページ、またはカスタム投稿タイプを表示するかどうかを定義します。
パラメータの使用方法
特定のカテゴリの投稿を表示したい場合は、 category_name
パラメータを使用できます。以下に例を示します。
$query = new WP_Query( array( 'category_name' => 'WordPress' ) );
これにより、「スタッフ」カテゴリとサブカテゴリのすべての投稿が表示されます。
より複雑な例
この例では、さまざまな引数で複数の値を利用して、必要な投稿を正確に取得するための複雑でカスタマイズされたクエリを作成する方法を示します。
特定のカテゴリに属し、特定のタグがあり、特定の作成者によって作成され、日付の降順で並べ替えられた投稿を取得します。
$args = array(
'category__in' => array(5, 10), // Categories with IDs 5 and 10
'tag__in' => array('featured', 'popular'), // Posts tagged with 'featured' or 'popular'
'author__in' => array(1, 2), // Authors with IDs 1 and 2
'orderby' => 'date', // Order by date
'order' => 'DESC', // In descending order
'posts_per_page' => 10 // Limit to 10 posts
);
$query = new WP_Query($args);
// The Loop
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
// Display post content
the_title('<h2>', '</h2>');
the_excerpt();
}
} else {
// No posts found
echo 'No posts found';
}
// Restore original Post Data
wp_reset_postdata();
- category__in : ID 5 と 10 のカテゴリからの投稿が必要であることを指定するのに役立ちます。
- tag__in : 投稿に「注目」または「人気」のタグを付けるように指定します。
- author__in : ID 1 と 2 の著者による投稿が必要であることを指定します。
- orderby : 投稿を公開日順に並べることを指定します。
- order : 投稿を降順 (新しい順) で表示することを指定します。
- photos_per_page : 取得する投稿の数を 10 に制限します。
4. メソッドとクラスのプロパティを使用してオブジェクトを変更する
WordPress では、 WP_Query
データベースから投稿を取得するために使用される特別な PHP クラスです。これは、Web サイトに表示したい正確な投稿を取得するのに役立つツールと考えてください。
クラスのプロパティとメソッドとは何ですか?
PHP では、クラスはプロパティ(変数など) とメソッド(関数など) を持つことができます。それらを理解する簡単な方法は次のとおりです。
- プロパティ: これらは情報を保持するコンテナのようなものです。
WP_Query
のコンテキストでは、プロパティには投稿のリストや見つかった投稿の数などが含まれる場合があります。 - メソッド: これらは、実行できるツールまたはアクションのようなものです。
WP_Query
では、投稿があるかどうかの確認、投稿のタイトルの取得、クエリのリセットにメソッドを使用できます。
プロパティを直接変更できますか?
いいえ、プロパティを直接変更することはできません。開発者もこれを強く推奨しませんが、代わりにメソッドを使用することはできます。
メソッドは、正しい方法に従うのに役立つ公式ツールやコマンドのようなものです。これらはまさに関数と同じように機能するもので、WP_Query のメソッドに特定の変更を加えると、フェッチされるデータをカスタマイズすることもできます。
WP_Query でのメソッドの使用例
この例では、reset_postdata() 関数が WP_Query を作成する際の重要なステップになる可能性があります。このメソッドは、$current_post と $post のプロパティをリセットします。
<?php
// Create a new query with specific arguments
$the_query = new WP_Query(array(
'post_type' => 'post',
'posts_per_page' => 5,
'category_name' => 'news',
));
?>
<?php if ($the_query->have_posts()) : ?>
<!-- Display the posts -->
<?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
<h2><?php the_title(); ?></h2>
<p><?php the_excerpt(); ?></p>
<?php endwhile; ?>
<!-- Reset the post data to avoid conflicts -->
<?php wp_reset_postdata(); ?>
<?php else : ?>
<p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
<?php endif; ?>
壊す:
- クエリの作成:
-
$the_query = new WP_Query($args);
: 指定した引数を使用して新しいWP_Query
オブジェクトを作成します。
-
- 投稿をチェックしています:
-
if ($the_query->have_posts())
: クエリに基づいて表示する投稿があるかどうかを確認します。
-
- 投稿をループする:
-
while ($the_query->have_posts()) : $the_query->the_post();
:投稿データを表示できるように設定します。
-
- 投稿の表示:
-
the_title();
そしてthe_excerpt();
:現在の投稿のタイトルと抜粋が表示されます。
-
- 投稿データのリセット:
-
wp_reset_postdata();
: グローバル投稿データをメインクエリの投稿にリセットします。これは、ページの他の部分を台無しにすることを避けるために重要です。
-
使用できる一般的な方法
クエリの操作に使用できるWP_Query
の一般的なメソッドをいくつか示します。
-
get_posts
:- 機能: 投稿のリストを取得します。
- 例:php コードをコピー
$posts = get_posts(array('category' => 'news'));
-
have_posts
:- 内容: 表示する投稿があるかどうかを確認します。
- 例:phpCopy code
if ($the_query->have_posts()) { // There are posts to show }
-
the_post
:- 内容: 現在の投稿データを設定します。
- 例:php コードをコピー
$the_query->the_post();
-
fill_query_vars
:- 機能: 欠落しているクエリの詳細を補完します。
- 例:phpコードをコピー
$the_query->fill_query_vars($args);
WP_Query に適切な情報を提供することで、さまざまなタスクを実行するようにカスタマイズできます。この方法は、クラスのプロパティを調整するための柔軟かつ安全な方法です。
WP_Query と query_posts(): どちらが望ましいでしょうか?
以下は、WordPress におけるWP_Query
とquery_posts()
の詳細な比較表です。一般的にWP_Query
がquery_posts()
よりも好まれる理由を理解するのに役立つ主要なポイントが含まれています。
特徴 | WP_クエリ | クエリポスト() |
---|---|---|
目的 | データベースから投稿を取得するためのカスタム クエリを作成します。 | ページ上のメイン クエリを変更します (一般的な使用には推奨されません)。 |
主な用途 | 新しいクエリを作成したり、カスタム方法で投稿を表示したりするのに最適です。 | 通常はメインクエリを変更するために使用されますが、推奨されません。 |
推奨される使用方法 | はい、これが投稿を取得して表示するための推奨される方法です。 | いいえ、メインのループ、プラグイン、テーマ内でこの関数を使用しないことをお勧めします。 |
メインクエリへの影響 | メインクエリには影響しません。メインループを変更せずにカスタムクエリを実行できます。 | メインクエリを完全にオーバーライドするため、競合や予期しない結果が発生する可能性があります。 |
投稿データをリセットする | カスタムクエリの実行後に元のクエリを復元するにはwp_reset_postdata() を使用します。 | 同等の機能はないため、メインクエリのポストデータを手動で復元する必要がある場合があります。 |
複数のクエリの処理 | 複数のクエリを処理でき、複雑なシナリオ向けに設計されています。 | 1 つのクエリのみを処理し、メイン クエリを変更します。これは複数のクエリで問題となる可能性があります。 |
パフォーマンスへの影響 | メインクエリを変更しないため、一般にパフォーマンスが向上します。 | メインクエリへの影響により効率が低下し、問題が発生する可能性があります。 |
カスタムクエリの例 | $custom_query = new WP_Query(array('post_type' => 'post', 'posts_per_page' => 5)); | query_posts(array('post_type' => 'post', 'posts_per_page' => 5)); |
データのリセット例 | <?php wp_reset_postdata(); ?> | リセット機能はありません。メインクエリに変更を加えた場合は手動でリセットする必要があります。 |
使いやすさ | 投稿やページをクエリするための組み込みメソッドと関数を簡単に使用できます。 | それほど単純ではないため、慎重に使用しないと問題が発生する可能性があります。 |
WP_Query の使用例のいくつか
WP_Query とその実際の使用法をよりよく理解するには、以下に示す例のいくつかを確認してください。
1. 今週公開された最新の投稿を表示する
優れたユーザー ベースまたは十分な量の Web トラフィックがある場合、訪問者はコンテンツを気に入っており、サイトに公開されている最新の記事を読みたいと考えていることを意味します。
Web サイトのデザイン中に、Web ページの専用セクションに最近の投稿を特集できます。ありがたいことに、WP_Query を使用すると、日付パラメーターに基づいて投稿を簡単に見つけることができます。その方法を見てみましょう。
<?php
$arguments = array(
"date_query" => array(
array(
"year" => date( "Y" ),
"week" => date( "W" ),
)
)
);
$posts = new WP_Query($arguments);
?>
この例では、今週公開された投稿を検索するための WP_Query を作成します。 date_query
と呼ばれる WP_Query の特別な部分を使用して、検索条件を指定します。
クエリの主な目的は、今週中に公開された投稿を検索することでした。そのために、date_query パラメーターを使用して日付に基づいて投稿を検索しました。日付関連の引数の配列を受け取ります。
したがって、 date_query
パラメーターをカスタマイズすると、最近公開された投稿を取得して表示できます。ただし、カスタム値を自由に指定して、クエリをより効果的にしたり、過去 1 週間に書かれた最新の記事を強調表示したりすることもできます。
2. 特定のカテゴリの最新の投稿を表示する
Web サイトの訪問者は最新の情報を探すことが多いため、エンゲージメントとページビューを増やすために、彼らが好みそうな関連投稿をいくつか提案することをお勧めします。
ただし、WordPress で関連投稿にリンクする方法はたくさんありますが、WP_Query はこれを行うための効率的な方法の 1 つです。特に、常に最新のコンテンツを投稿する Web サイトにとっては優れた方法です。
たとえば、誰かが WordPress エラーに関する記事を読んだ場合、WP_Query は他の同様の記事や最近の記事を表示するのに役立ちます。
したがって、特定のカテゴリの最新の投稿を取得したい場合は、この WP_query を使用し、サイト情報を含む少しの編集を加えます。
<?php
// Get the current post id.
$current_post_id = get_the_ID();
// Get the current post's category (first one if there's more than one).
$current_post_cats = get_the_category();
$current_post_first_cat_id = $current_post_cats[ 0 ]->term_id;
// Setup arguments.
$args = array(
// Get category's posts.
'cat' => $current_post_first_cat_id,
// Exclude current post.
'post__not_in' => array( $current_post_id )
);
// Instantiate new query instance.
$my_query = new WP_Query( $args );
?>
3. 同じ著者による同じカテゴリの投稿を表示する
訪問者がコンテンツを楽しんでいる場合、著者の見解、文体、認識を気に入っている可能性が高くなります。
このために、WP_Query を使用して、同じ著者によって書かれた同様の投稿を読者に提案できます。クエリは、現在の投稿と同じカテゴリで同じ著者によって書かれた投稿を検索します。
このためには、類似した著者と同じカテゴリの投稿を探す特定の WP_Query 文字列を作成する必要があります。
コードは次のとおりです。
<?php
$arguments = array(
"author_name" => "Rahul",
"category_name" => "WordPress",
"posts_per_page" => 3,
);
$posts = new WP_Query($arguments);
?>
上記のコードでは、「Rahul」を作成者の名前に、「WordPress」をカテゴリ名に置き換える必要があります。
4. 最も人気のある投稿を表示する
読者向けに表示した最新の投稿や最近の投稿と同様です。読者が好んで頻繁に参加するトピックに関する投稿を表示したい場合もあります。これを実現するには、 orderbyパラメーターを使用して、それをcomment_count引数に渡すことができます。
<?php
$arguments = array(
"category_name" => "WordPress Errors",
"orderby" => "comment_count",
"posts_per_page" => 5,
);
$posts = new WP_Query($arguments);
?>
上記の WP_Query は、「WordPress エラー」カテゴリの投稿を検索し、各投稿のコメント数によって結果をフィルターします。
出力には、コメント数が最も多い 5 つの投稿が左から右に降順で表示されます。エンゲージメントが最も高い投稿から始まり、最も少ない投稿で終わります。
結論
WP_Query がいかに強力であるか、また WP_Query を使用すると WordPress でのデータベース リクエストの実行がいかに簡単になるかがわかりました。また、サイトをカスタマイズして訪問者にユニークなエクスペリエンスを提供する柔軟性も提供します。
WP_Query を使用するには、次のことができます。
- ループの作成:投稿を表示します。
- クエリ引数を使用する:検索をカスタマイズします。
- 特定のパラメータを設定:結果をフィルタリングします。
- クラス プロパティの変更:メソッドを使用してクエリ結果を調整します。
これらのテクニックをすべてマスターすれば、人気や日付などのさまざまな要素に基づいて特定の投稿を簡単に推奨できるようになります。
この手法は、ユーザーのエンゲージメントを高め、ユーザー エクスペリエンスを向上させるのに役立ち、忠実な訪問者がより関連性の高いコンテンツを見つけやすくなります。
WP_Query に関してまだ疑問がある場合、または見逃している可能性のあるコンテンツをさらに追加したい場合は。下記のコメント欄でお知らせください。
Rahul Kumar は Web 愛好家であり、WordPress と Web ホスティングを専門とするコンテンツ ストラテジストです。長年の経験と業界のトレンドを常に最新の状態に保つことに注力し、トラフィックを促進し、エンゲージメントを高め、コンバージョンを増やす効果的なオンライン戦略を作成しています。ラーフル氏は、細部へのこだわりと魅力的なコンテンツを作成する能力により、オンラインでの存在感を向上させようとしているあらゆるブランドにとって貴重な人材となっています。