2025年07月22日[火曜日]

脱ループブロック!WP_Queryで始める自由自在な投稿一覧表示

  • 2025/07/22
  • BASICS
  • WordPressの基礎
  • 0comments
  • 45views
  • 約8分で読めます
  • 26

前回の記事では、WordPressのパーマリンクについて学習し、設定方法から運用まで詳しく解説しました。記事の最後で「お知らせ」ページを作成する宿題を出しましたが、今回はそれを活用してWP_Query関数による投稿一覧の表示について実践的に学習します。

WP_Query関数は、WordPressのメイン機能とも言える非常に重要な関数です。この関数を理解することで、WordPressでできることの幅が大幅に広がり、より柔軟で高度なWebサイト構築が可能になります。

今回の目標

  • WP_Query関数の基本的な仕組みを理解する
  • PHPを使って投稿一覧を表示する方法を習得する
  • ループブロックとの違いと使い分けを学ぶ

宿題の確認

「おしらせ(news)」ページはできましたか?

前回の宿題で、スラッグが「news」の固定ページを作成していただきました。詳しい説明は不要で、できていることを前提に進めていきます。専用テンプレートpage-news.phpも以下のような内容で作成されているはずです。

<?php get_header();?>
        <?php the_content(); ?>
        <p>※このページは page-news.php テンプレートで表示されています</p>
<?php get_footer();?>
関連する記事
固定ページに「お知らせ」を追加

スラッグをnewsとする。順序は380とした。

メニューに追加

外観メニューで「お知らせ」を追加

VSCodeでpage-new.phpを作成
ブラウザで表示確認

投稿一覧の表示

以前、ループブロックを使って投稿一覧を表示する方法 を紹介しました。ループブロックは手軽で便利な機能ですが、以下のような制約があります。

  • 細かな抽出条件を設定できない
  • 表示内容やデザインを自由に変更できない
  • 複雑な表示ロジックには対応しにくい

テンプレートファイルにPHPを使って一覧を表示することで、これらの問題点を解消でき、より柔軟で高度な表示制御が可能になります。

関連する記事

wp_queryとは

WP_Queryは、WordPressのデータベースから投稿や固定ページなどのコンテンツを取得するためのPHPクラスです。実は、WordPressの投稿表示システムの中核を担っており、通常のページ表示でも内部的にはWP_Queryが使用されています。

WP_Queryを直接使用することで、以下のようなメリットがあります。

  • 詳細な抽出条件を指定できる
  • カスタム投稿タイプにも対応
  • カテゴリーやタグでの絞り込みが可能
  • 表示順序を自由に変更できる
  • 表示件数を制限できる
  • 複数の条件を組み合わせられる

wp_queryの基本パターン

WP_Queryを使用する際の基本的なコードパターンは以下のとおりです。

// 抽出条件
$args = [
    'post_type'      => 'post',
    'post_status'    => 'publish',
];

// 抽出
$the_query = new WP_Query($args);

// 抽出結果の表示
while ($the_query->have_posts()) {
	$the_query->the_post();
	/* ここで表示処理 */
}

// リセット
wp_reset_postdata();

このパターンの各部分を簡単に説明します。

抽出条件($args):2~5行目
  • post_type:コンテンツの種類を指定します。主に固定ページ(page)、投稿(post)を使用しますが、他にもカスタム投稿タイプなどがあります
  • post_status:コンテンツの状態を指定します。publishは公開済みを意味し、そのほかにも下書き(draft)や削除(trash)などもあります

引数はこのほかにもたくさんありますが、学習を進める中で都度説明していきます。

データの抽出: 8行目

new WP_Query($args)で、指定した条件($args)に該当するデータをデータベースから抽出し、抽出結果を$the_query変数に保存します。

繰り返し処理 :11~14行目

while ($the_query->have_posts())は、「データがある間は繰り返す」という意味です。$the_query->the_post()によって、WordPressの特別な変数$postに1件分のデータが格納されます。

この$post変数から、タイトルや本文、パーマリンク(URL)などの情報を取り出して表示する流れとなります。

投稿一覧を表示してみよう

それでは実際に、宿題で作成したpage-news.phpを以下のように修正して投稿一覧を表示してみましょう。

<?php get_header();?>
        <?php the_content(); ?>
<?php
$args = [
    'post_type'      => 'post',
    'post_status'    => 'publish',
];

// 抽出
$the_query = new WP_Query($args);

// 抽出結果の表示
if($the_query->have_posts()) {
	echo '<ul>';
	while ($the_query->have_posts()) {
		$the_query->the_post();
		echo '<li><a href="'.get_the_permalink($post->ID).'">'.get_the_title($post->ID).'</a></li>';
	}
	echo '</ul>';
} else {
	echo '該当する投稿がありません';
}

// リセット
wp_reset_postdata();
?>
        <p>※このページは page-news.php テンプレートで表示されています</p>
<?php get_footer();?>

このコードの主要な部分を解説します。

条件分岐

if($the_query->have_posts())で、該当するデータがあるときだけ<ul>タグを出力し、該当するデータがなければメッセージを表示します。これにより、データが存在しない場合に空のリストが表示されることを防げます。

データの取得と表示

echo '<li><a href="'.get_the_permalink($post->ID).'">'.get_the_title($post->ID).'</a></li>';の部分が重要なポイントです。

  • echoで、HTMLとPHPの値を組み合わせて、ブラウザに表示するためのHTMLを作り出しています
  • get_the_permalink($post->ID)でパーマリンク(URL)を取得し、<a>タグのhref属性に使用
  • get_the_title($post->ID)でタイトルを取得し、リンクテキストとして表示

この仕組みを理解することで、PHPを使って動的にHTMLを生成する基本的な流れが分かります。

リセット処理

最後のwp_reset_postdata()は非常に重要です。これによって、WordPressの特別な変数$postを元の状態に戻します。この処理を忘れると、ページの他の部分に影響を与える可能性があります。

それでは、ブラウザでお知らせページを表示して結果を確認してみましょう。投稿が存在していれば、タイトルがリンク付きのリストとして表示されるはずです。

ページの表示を確認したら、次はソースも確認してみましょう。

CTRL+UキーでソースのHTMLを確認できます。

<ul><li><a href="http://sample.local/news/53">新店舗オープンのお知らせ</a></li><li><a href="http://sample.local/news/51">SNS総フォロワー100人を達成しました</a></li><li><a href="http://sample.local/news/49">WordPress講習会開催のお知らせ</a></li><li><a href="http://sample.local/news/47">夏季休暇のお知らせ</a></li><li><a href="http://sample.local/news/45">Webサイト開設のお知らせ</a></li><li><a href="http://sample.local/news/1">Hello world!</a></li></ul>        <p>※このページは page-news.php テンプレートで表示されています</p>

echoは改行を入れないため、すべてが1行に繋がった状態で出力されます。ブラウザ上の見た目は正しく表示されますが、ソースコードとしては読みにくくなっています。

ソースコードを読みやすくする

開発時には、ソースコードが読みやすい方がデバッグなどの作業がしやすくなります。そのために、PHPのPHP_EOLという定数を使用して改行を追加することができます。

PHP_EOLは「End Of Line(行の終わり)」の略で、改行コードを表す定数です。これを使用して、先ほどのpage-news.phpを以下のように修正してみましょう。

<?php get_header();?>
        <?php the_content(); ?>
<?php
$args = [
    'post_type'      => 'post',
    'post_status'    => 'publish',
];

// 抽出
$the_query = new WP_Query($args);

// 抽出結果の表示
if($the_query->have_posts()) {
	echo '<ul>'.PHP_EOL;
	while ($the_query->have_posts()) {
		$the_query->the_post();
		echo '<li><a href="'.get_the_permalink($post->ID).'">'.get_the_title($post->ID).'</a></li>'.PHP_EOL;
	}
	echo '</ul>'.PHP_EOL;
} else {
	echo '該当する投稿がありません'.PHP_EOL;
}

// リセット
wp_reset_postdata();
?>
        <p>※このページは page-news.php テンプレートで表示されています</p>
<?php get_footer();?>

この修正を行った後、再度ブラウザでソースを確認してみてください。今度は以下のように整理された形で出力されるはずです。

<ul>
<li><a href="http://sample.local/news/53">新店舗オープンのお知らせ</a></li>
<li><a href="http://sample.local/news/51">SNS総フォロワー100人を達成しました</a></li>
<li><a href="http://sample.local/news/49">WordPress講習会開催のお知らせ</a></li>
<li><a href="http://sample.local/news/47">夏季休暇のお知らせ</a></li>
<li><a href="http://sample.local/news/45">Webサイト開設のお知らせ</a></li>
<li><a href="http://sample.local/news/1">Hello world!</a></li>
</ul>

このように、PHPのechoによってHTMLとPHPの値が組み合わされ、ブラウザが理解できるHTMLとして出力されています。これがWordPressの動的サイト生成の基本的な仕組みです。

HTMLのソースコードがみやすくなりましたので、投稿一覧の内容もしっかり確認できます。

aタグに投稿のパーマリンク、リンクテキストに投稿のタイトルが出力されていることがわかります。

まとめ

今回の記事では、WP_Query関数を使用した投稿一覧の表示について学習しました。

WP_Queryの基本的な仕組みを理解することで、ループブロックでは実現できない柔軟な投稿表示が可能になります。特に、条件を細かく指定したり、表示内容を自由にカスタマイズしたりできる点が大きなメリットです。

WP_Queryの真価は豊富な抽出条件にあります。カテゴリーでの絞り込み、並び順の変更、表示件数の制限など、様々な条件を組み合わせることで、より実用的な投稿一覧を作成できます。

今回は最も基本的な使い方を紹介しましたが、同時に以下の重要なポイントも学習しました。

  • echoによるHTMLとPHPの組み合わせ方
  • ブラウザのソースコード確認によるデバッグ手法
  • PHP_EOLを使った読みやすいコードの作成

これらは一見WP_Queryとは関係ないように見えますが、WordPressでテンプレートを開発する上で欠かせない基本的なスキルです。こうした細かなテクニックの積み重ねが、後々の開発効率や品質に大きく影響してきます。

次回予告

次回の記事では、WP_Queryの抽出条件をより詳しく学習します。

  • カテゴリーやタグでの投稿絞り込み
  • 投稿の並び順(新着順、古い順、ランダムなど)の変更
  • 表示件数の制限
  • 複数条件の組み合わせ

これらの機能を活用することで、サイトの用途に応じた最適な投稿一覧を作成できるようになります。次回もお楽しみに!

成果物

この記事で作成した成果物は、以下のページでまとめて確認することができます。

成果物をまとめて確認する

この記事の評価をお願いします

評価をすると「既読」となり、まだ読んでいない記事を区別できます。

この投稿をシェアする

コメントを残す

CAPTCHA



パーマリンクとは?設定方法から運用まで完全ガイド

パーマリンクとは?設定方法から運用まで完全ガイド  BASICS

WordPressのパーマリンクについて基本概念から実践的な設定方法まで詳しく解説します。投稿と固定ページのURL構造の違い、SEOと運用性を考慮した推奨設定など、効果的なWebサイト運用に欠かせないパーマリンクの知識を学習できます。

  • 2025/07/19
  • 0comments
  • 41views

STAY CONNECTED

wp-ch Admin

現役のフリーランスエンジニアがWordPressによるWebサイト構築を基礎から実践テクニックまで徹底解説します。

たくさんの方がフォローしてくれています。あなたもぜひ、情報を受け取ってください。

STORY|ストーリー

WordPressを効率よく確実に学ぶためには、学習の順序が大切です。知識が自然に積み上がるよう、学習ステップに沿って記事を順番に並べています。

学習ストーリー第26話まで掲載中

全ストーリーを見る

TAGS|タグ