関連する記事
パーマリンクとは?設定方法から運用まで完全ガイド
WordPressのパーマリンクについて基本概念から実践的な設定方法まで詳しく解説します。投稿と固定ページのURL構造の違い、SEOと運用性を考慮した推奨設定など、効果的なWebサイト運用に欠かせないパーマリンクの知識を学習できます。
前回の記事では、WordPressのパーマリンクについて学習し、設定方法から運用まで詳しく解説しました。記事の最後で「お知らせ」ページを作成する宿題を出しましたが、今回はそれを活用してWP_Query
関数による投稿一覧の表示について実践的に学習します。
WP_Query関数は、WordPressのメイン機能とも言える非常に重要な関数です。この関数を理解することで、WordPressでできることの幅が大幅に広がり、より柔軟で高度なWebサイト構築が可能になります。
今回の目標
目次
「おしらせ(news
)」ページはできましたか?
前回の宿題で、スラッグが「news
」の固定ページを作成していただきました。詳しい説明は不要で、できていることを前提に進めていきます。専用テンプレートpage-news.phpも以下のような内容で作成されているはずです。
<?php get_header();?>
<?php the_content(); ?>
<p>※このページは page-news.php テンプレートで表示されています</p>
<?php get_footer();?>
以前、ループブロックを使って投稿一覧を表示する方法 を紹介しました。ループブロックは手軽で便利な機能ですが、以下のような制約があります。
テンプレートファイルにPHPを使って一覧を表示することで、これらの問題点を解消でき、より柔軟で高度な表示制御が可能になります。
WP_Query
は、WordPressのデータベースから投稿や固定ページなどのコンテンツを取得するためのPHPクラスです。実は、WordPressの投稿表示システムの中核を担っており、通常のページ表示でも内部的には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();
このパターンの各部分を簡単に説明します。
post_type
:コンテンツの種類を指定します。主に固定ページ(page
)、投稿(post
)を使用しますが、他にもカスタム投稿タイプなどがありますpost_status
:コンテンツの状態を指定します。publish
は公開済みを意味し、そのほかにも下書き(draft
)や削除(trash
)などもあります引数はこのほかにもたくさんありますが、学習を進める中で都度説明していきます。
new WP_Query($args)
で、指定した条件($args
)に該当するデータをデータベースから抽出し、抽出結果を$the_query
変数に保存します。
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を元の状態に戻します。この処理を忘れると、ページの他の部分に影響を与える可能性があります。
<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_Quer
yの抽出条件をより詳しく学習します。
これらの機能を活用することで、サイトの用途に応じた最適な投稿一覧を作成できるようになります。次回もお楽しみに!
この記事で作成した成果物は、以下のページでまとめて確認することができます。
WordPressのパーマリンクについて基本概念から実践的な設定方法まで詳しく解説します。投稿と固定ページのURL構造の違い、SEOと運用性を考慮した推奨設定など、効果的なWebサイト運用に欠かせないパーマリンクの知識を学習できます。
WordPressを効率よく確実に学ぶためには、学習の順序が大切です。知識が自然に積み上がるよう、学習ステップに沿って記事を順番に並べています。
学習ストーリー第26話まで掲載中