前回未着手だった「ズーロッパ東京とは」と「お知らせ」のセクションをWordPress化します。
今回のレッスンでindex.phpが完成しますよ。
お知らせカテゴリーの投稿情報を表示
前レッスンの復習も兼ねて、先に「お知らせ」のセクションを作ります。
1.ループを設定する
記事リンクを囲うdiv
タグの下辺りに、WP_Query
を使ったループ(while文)を挿入します。
変更が必要なのは、以下の2箇所です。
- カテゴリーを指定する
category_name
の値(infoにする) - 取得件数を指定する
posts_per_page
の値(3にする)
index.php
<?php
$args = array( // 取得したい投稿の条件指定
'post_type' => 'post',
'category_name' => 'info',
'posts_per_page' => 3,
);
$info_posts = new WP_Query($args);
while ($info_posts->have_posts()): $info_posts->the_post();
?>
<!-- ループで表示したい内容 -->
<?php endwhile; wp_reset_postdata(); ?>
new WP_Query($args)
の左にある変数名は、そのままでも、変更しても良いです。
上記コードでは分かりやすいよう変えています。
2.ループで表示させる内容を書く
ループの中に、繰り返し表示させたい内容を書きます。
投稿1つ分、素材のコードだと<article> ~ </article>
までですね。
以下3つはテンプレートタグを使って、WordPressに登録されている情報を表示します。
- 日にち部分:投稿日を表示する
<?php echo get_the_date(); ?>
- aタグのリンク先:
<?php the_permalink() ?>
- h3タグの中身:投稿タイトルを表示する
<?php the_title(); ?>
index.php
<?php
$args = array( // 取得したい投稿の条件指定
'post_type' => 'post',
'category_name' => 'info',
'posts_per_page' => 3,
);
$info_posts = new WP_Query($args);
while ($info_posts->have_posts()): $info_posts->the_post();
?>
<article class="flex-container">
<div class="info-date">
<?php echo get_the_date(); ?>
</div>
<h3 class="info-title">
<a href="<?php the_permalink() ?>">
<?php the_title(); ?>
</a>
</h3>
</article>
<?php endwhile; wp_reset_postdata(); ?>
上書き保存して、表示を確認します。 ループを使って表示している部分が、HTMLで作った部分と同じように表示されていれば完成。
必要なくなった、HTMLを直に書いている部分(上図、黒い線の部分)のコードは削除してください。
もっと見る のリンク
お知らせの最下部にあるボタン風デザインの「もっと見る」。
ここのリンク先には、カテゴリーアーカイブページのURLを取得するget_category_link();
というテンプレートタグを使います。
<?php get_category_link( $category_id ); ?>
( )
内の$category_id
には、移動したいカテゴリーのIDを入れます。
カテゴリーのIDは、カテゴリーの編集画面を開いた時のURLで確認できます。
URLの中にcategory&tag_ID=〇〇
という部分があるので、探してみてください。
下図の場合、カテゴリーのIDは「6」です。
get_
から始まる“取得”のテンプレートタグは、それだけだと情報を書き出してはくれません。
get_the_date();
などと同じく、出力せよという命令「echo」をセットで使います。
index.php
...
<?php endwhile; wp_reset_postdata(); ?>
<p class="text-center">
<a href="<?php echo get_category_link( 6 ); ?>" class="btn-more text-white">もっと見る</a>
</p>
index.phpを上書き保存して、リンク先が設定できているかを確認してください。
ズーロッパ東京とは セクションの調整
「ズーロッパ東京とは」のセクションを作成します。
ここは、固定ページの情報を取得して表示するタイプです。
特定の固定ページの情報を出力する
今回のように特定の固定ページから情報を取り出したいときも、WP_Query
が使えます。
取得したい投稿の条件を指定する$args = array( )
の中に、下記のように書けばOKです。
<?php
$args = array(
'page_id' => ●, // 取得する固定ページの IDを書く
);
使用するページのIDは、カテゴリーIDと同様に編集画面のURLで確認できます。
URLの中にあるpost.php?post=〇〇
部分の数字がID。下図の場合だと22です。
「ズーロッパ東京とは」の見出し+画像の下辺りにWP_Query
を使ったループを書きます。page_id
の値には、ご自身のWordPressで確認したIDを入れてください。
index.php
<h2 class="text-green text-center">
ズーロッパ東京とは
</h2>
<div class="text-center">
<img src="<?php echo get_template_directory_uri();?>/images/line.png" width="400" height="6" alt="">
</div>
<?php
$args = array(
'page_id' => 22, // ご自身のIDを入れてください
);
$about_page = new WP_Query($args);
while ($about_page->have_posts()): $about_page->the_post();
?>
<!-- 表示したい内容 -->
<?php endwhile; wp_reset_postdata(); ?>
コメントアウト<!-- 表示したい内容 -->
のところに、中身(画像やテキスト)をまるっと全て入れます。
以下3箇所をテンプレートタグに置き換えてください。
- imgタグ:投稿のアイキャッチを表示する
<?php the_post_thumbnail(); ?>
- h3タグの中身:投稿タイトルを表示する
<?php the_title(); ?>
<p>~</p>
まで:投稿の抜粋を表示する<?php the_excerpt(); ?>
index.php
<?php
$args = array( // 取得したい投稿の条件指定
'page_id' => 22,
);
$about_page = new WP_Query($args);
while ($about_page->have_posts()): $about_page->the_post();
?>
<div class="flex-container">
<div class="about-image card">
<?php the_post_thumbnail(); ?>
</div>
<div class="about-description">
<h3 class="text-green">
<?php the_title(); ?>
</h3>
<?php the_excerpt(); ?>
</div>
</div>
<?php endwhile; wp_reset_postdata(); ?>
レイアウト崩れなく、固定ページのタイトルやサムネイルが表示されていたら完成です!
※抜粋<?php the_excerpt(); ?>
の文字数制限で、文章が途中で省略されていますが、このままにしてください。
気になる方は、<?php the_content(); ?>
を使って全文出力しても良いです。
WP_Query
のパラメータについて
いろいろな条件で取得する投稿や固定ページの絞り込みができる`WP_Query
。
条件指定に使ったcategory_name
やpage_id
などのことを、パラメーターと言います。
使用できるパラメーターはWordPress公式のサイトで紹介されています。
https://developer.wordpress.org/reference/classes/wp_query/
このテーマ開発ハンドブック、日本語版も用意されてはいるのですが、まだ、ほとんど翻訳されていません。
https://ja.wordpress.org/team/handbook/theme-development/
個人でまとめている、チートシートを作られている方が結構いらっしゃいます。
日本語で確認したい場合は、下記のようなをページを参考にさせていただきましょう。
https://rishuntrading.co.jp/blog/wordpress/wp_query-get_posts-code-snippet/