WordPressのお知らせ一覧ページの作り方を紹介します。
WordPressのお知らせ一覧ページは「投稿アーカイブ」のことです。投稿アーカイブは、一般的なホームページの場合にはお知らせ一覧ページ、ブログ専用サイトの場合には記事一覧ページに使われます。
どちらも作り方は同じですので、この記事では「お知らせ一覧」を例に解説していきます。
お知らせのループ構造を作る
はじめにお知らせ一覧を作るときの肝となる「記事のループ構造」の作り方を紹介します。
完成イメージ
今回作るのは下記のようなお知らせ一覧です。
表示内容は、「投稿日」「カテゴリー名」「お知らせの内容」の三項目です。
テンプレートファイル用のPHPコード
投稿アーカイブを作るときに壁になるのが「お知らせのループ構造」です。下記にループ構造の抜粋部分を載せておきますので、投稿アーカイブのテンプレートファイル「archive.php」に貼り付けて利用して下さい。
お知らせ一覧に直接関係する「ループ構造」の箇所を抜粋すると下記のようになります。
<!-- お知らせ一覧 -->
<ul class="news-info_wrapper">
<?php
// ページ番号の取得
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$args = array(
'post_type' => 'post', //投稿タイプ
'posts_per_page' => 10, //1ページの表示数
'paged' => $paged //何ページ目の情報を取得するかを指定
);
// 以下、ループ構造
$the_query = new WP_Query($args);
if ($the_query->have_posts()) : while ($the_query->have_posts()) : $the_query->the_post(); ?>
<?php
$cat = get_the_category(); // カテゴリの配列を返すWordPress関数
$catslug = $cat[0]->slug; // カテゴリslugの変数
$cat_name = $cat[0]->name; // カテゴリ名の変数
?>
<li class="news-row_wrapper">
<div class="news-date_wrapper">
<!-- 投稿日表示 -->
<div class="news-date"><?php the_time('Y年n月j日') ?></div>
<!-- カテゴリ名表示(カテゴリ名slugでクラス付与・リンクなし) -->
<div class="news-classification">
<div class="<?php echo esc_attr($catslug); ?>"><?php echo esc_html($cat_name); ?></div>
</div>
</div>
<div class="news-content">
<!-- お知らせ内容表示 -->
<p><?php the_content(); ?></p>
</div>
</li>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php endif;
?>
</ul>
- お知らせ一覧に表示させる内容は、19-32行目のliタグの中に配置します。各コードの意味はコメントアウトを参照願います。
- それ以外は設定用コードです。基本コピペで実装できますが、重要設定箇所の説明を以下に続けます。
- 1ページのお知らせ表示数(8行目):’posts_per_page’ => 10,
- ページネーションの利用(9行目):’paged’ => $paged
一覧の表示内容は「投稿日」「カテゴリー名」「お知らせ内容」の3点のみです。表示内容に記事タイトルを加えたい場合は次節を参照して下さい。
注意:記事数の表示設定で生じるバグの解消方法
アーカイブページのお知らせ表示数は、WordPress管理画面>設定>表示設定>1ページに表示する最大投稿数よりも多い数字にしないと表示がバグります。
例えば、管理画面の表示設定で10記事となっているのに、記事一覧ページ(archive.php)の表示を9記事に設定していると、一番古いページが404ページに飛んでしまうバグが発生しました。
このバグを解消するために、管理画面の表示設定は、記事一覧ページ(archive.php)の表示を9記事よりも少ない、記事数(例えば5記事)に設定し直すとバグは解消されました。
表示内容の種類を増やしたい時
お知らせ一覧の表示内容を増やしたい時はループ内に下記のテンプレートタグを追加して下さい。
- お知らせタイトル:<?php the_title(); ?>
- お知らせの内容抜粋:<?php the_excerpt(); ?>
- サムネイル画像:<?php the_post_thumbnail(‘medium’); ?>
- href属性(リンク先):<a href=”<?php the_permalink(); ?>
- カスタムフィールド(プラグインACF使用):<?php the_field(‘識別子’); ?>
CSS設定
PHPファイルのループ構造は、ulタグとliタグのリスト構造で作られています。CSSはそのタグのクラス属性をセレクターとして書けばOKをです。
具体的なコードは各自お好みで書いて下さい。ここでは上の完成イメージにするためのCSS(Sass)を参考のために載せておきます。
// ---------------------------------------------------------------
// ここからお知らせページ専用のCSS
// ---------------------------------------------------------------
// お知らせ一覧全体の囲い
.news-info_wrapper {
background-color: fw.$white;
box-shadow: 0px 3px 6px fw.$shadow-black;
border-radius: 10px;
}
.news-info_wrapper.--front {
margin-top: 50px;
@include fw.mq("sp") {
margin-top: 30px;
}
}
// お知らせの行全体の囲い
.news-row_wrapper {
border-bottom: 1px solid fw.$line-gray;
display: grid;
grid-template-columns: 300px 1fr;
min-height: 100px;
@include fw.mq("sp") {
grid-template-columns: 100%;
padding-top: 10px;
padding-bottom: 10px;
}
}
.news-row_wrapper:last-child {
border-bottom: none;
}
// 日付とカテゴリの囲い
.news-date_wrapper {
display: grid;
grid-template-columns: 180px 120px;
@include fw.mq("sp") {
grid-template-columns: 45% 1fr;
}
}
.info,
.exhibition,
.holiday {
border: 1px solid fw.$dark-pink;
color: fw.$dark-pink;
border-radius: 25px;
width: 100px;
display: grid;
place-items: center;
@include fw.mq("sp") {
font-size: 1rem;
width: 60px;
}
}
.exhibition {
border: 1px solid fw.$green;
color: fw.$green;
}
.holiday {
border: 1px solid fw.$blue;
color: fw.$blue;
}
// 日付の囲い
.news-date {
display: grid;
align-items: center;
padding: 20px 20px 20px 40px;
@include fw.mq("tab") {
padding: 10px 20px 10px 40px;
}
@include fw.mq("sp") {
padding: 10px 10px 10px 20px;
font-weight: 600;
}
}
// カテゴリの囲い
.news-classification {
display: grid;
place-items: center;
@include fw.mq("sp") {
justify-content: start;
}
}
// お知らせ内容の囲い
.news-content {
display: grid;
align-items: center;
padding: 20px;
@include fw.mq("tab") {
padding: 10px 20px;
}
@include fw.mq("sp") {
padding: 0px 20px 10px 20px;
}
}
ページネーションの設定
お知らせ一覧ページは、お知らせ数が増えてくると複数ページに表示させることになりますが、それをページネーションと言います。ページネーションの設定については別記事にまとめましたので参照願います。
functions.phpの設定
お知らせ一覧ページはfunctions.phpに設定を書かないと表示されません。その設定については別記事にまとめてありますので参照願います。