【WordPress】「投稿」を「テンプレートパーツ」を使ってカテゴリ別一覧表示させる

WEB / アプリ

とっちゃん@nyanco! です。

今回は、【Wordpress】「投稿」を「テンプレートパーツ」を使ってカテゴリ別一覧表示させるというお話です。

nyanco! のメインホームページ改善プロジェクトの一環で、またまたWordPressのお勉強です。

▼前回記事はこちら
【WordPress】「Really Simple CSV Importer」で苦戦したこと – 八百万-やおよろず-雑記。

ワードプレスの「投稿」と「固定ページ」の違いを理解し、さらに「カテゴリー」と「タグ」の違いも理解し、その上で「投稿」にすべきページを「Really Simple CSV Importer」というCSVインポートプラグインで一気に流し込んで作成するところまでが、前回記事の内容です。

今回、その「投稿」ページを「カテゴリー」ごとに(別途用意したテンプレートパーツで)一覧表示させる方法を調べて実装したことを掘り下げてみました。

▼参考にさせていただいたページはこちら
「WordPressのトップページに、新着記事数件を表示する」get_postsのサンプルコードをあげとく – マイペースクリエイターの覚え書き
特定のカテゴリ一覧を表示させる|WordPress

早速ですが、コードです。

<?php
$posts = get_posts( array(
'posts_per_page' => 25, // 表示する記事の数
'orderby' => 'date', // 表示順は日付でソート
'order' => 'DESC', // ソート順指定。DESCは最新から、ASCは最古から
'category_name' => 'stamp-normal' // 表示したいカテゴリーのスラッグ
));
foreach( $posts as $post ):
setup_postdata( $post );
get_template_part('post-each-excerpt'); //別途用意した「テンプレートパーツ」  
endforeach;
wp_reset_postdata();
?>

上から順番に自分なりの理解で掘り下げたものが以下となります。

  • 2行目:「$posts = get_posts( array(」

「get_posts」はWordPressの「テンプレートタグ(WordPressに対して何かを表示・取得させたい時に使う)」で、パラメータに基づいて投稿データ配列を作成するもの。
「array(」に続く次の4行がパラメータとなります。
「$posts」は変数名で、その「配列」を格納します。変数名は任意に決めています。
ただ、「$post」という変数名は、WordPressで標準で定義されている「グローバル変数」というものなので、使わない方が良いみたいです。なので、「$post」に「s」をつけた名前としています。

  • 3〜5行目:「’posts_per_page’」「’orderby’」「’order’」

それぞれ「表示する記事数」、「記事の日付で並べる」、「並べ方の指定」を指定する。
上記のように、行末にコメントアウトでメモしておくと分かりやすいですよね。

  • 6行目:「’category_name’ => ‘stamp-normal’」

表示させたいカテゴリーの「スラッグ」を入力します。
ちなみに「スラッグ」は、WordPress管理画面の「投稿」「カテゴリー」画面で確認できます。
f:id:nyanco696:20190309204441j:plain:w400

※スラッグではなく「カテゴリーID」というものでも良いらしいのですが、ここでは割愛します。
※この行を削除すると、カテゴリ無視した新着記事の表示となります。

  • 7行目:「foreach( $posts as $post ):」

「foreach」はPHPの「ループ処理」文。配列の要素があるだけループ処理をさせたい時に使います。
この場合だと、2行目でgetした「$posts」の変数の配列内容を「$post」へ渡す(「as」は内容を「左」から「右」へ渡す意味)ということになります。

  • 8行目:「setup_postdata( $post );」

「setup_postdata」は ( $変数名 ) に内容をセットするイメージ?
詳しくはまだ理解できていません…

  • 9行目:「get_template_part(‘post-each-excerpt’);」

別途用意しているテンプレートパーツ「post-each-excerpt」を呼び出して、8行目でセットされた内容を表示させます。
このテンプレートパーツに関しては別記事で書こうと思ってます。

  • 10行目:「endforeach;」

「endforeach」はループ処理はここで終わりという意味。

  • 11行目:「wp_reset_postdata();」

「wp_reset_postdata();」は「グローバル変数」である「$post」を復元(リセット)させる意味。
いまいちまだ理解できておりません…

そもそも、この「php」という言語に関してはほぼ無知な私です。

そんな私でも、たくさんの先人様の記事のおかげで、100%理解できていなくともコピペと少しのカスタムで実装できてしまうのは本当に感謝しかありません。

先人様の記事の単純な焼き直しにならないよう、自分なりの切り口でまとめさせていただき、これからWordPressを学ぶ方へのヒントになればと思っております。
もちろん自分の備忘録+知識としても「書くこと」は重要です。

今回は以上となります。
最後まで読んでいただきましてありがとうございました!
それではまた〜✧٩(ˊωˋ*)و✧

コメント