スターターテーマ無しでフルスクラッチで作るWordPressの自作テーマ作り、第6弾。
今回はアーカイブページを作成します。
スターターテーマを使わずに
WordPress自作テーマを制作する
アーカイブページ(記事一覧ページ)
一覧記事を表示するarchive.phpを作成します。
アーカイブのテンプレートはもっと細かく分類することができますが、
- カテゴリ:category.php
- タクソノミー:taxonomy.php
- ユーザー:author.php
- 日付:date.php
- タグ:tag.php
まとめて同じテンプレートで表示したい場合はarchive.phpで表示できます。
今回はまとめて表示する方を採用します。
single.phpをベースに下記のコードに書き換えます。
<?php get_header(); ?>
<div class="wrap">
<main id="main-content">
<?php the_archive_title('<h1 class="title">', '</h1>'); ?>
<?php
if (have_posts()) :
while (have_posts()) : the_post();
?>
<a href="<?php the_permalink(); ?>">
<h2 class="title"><?php the_title(); ?></h2>
<div class="date">
<div>Release date. <?php the_time('Y/m/d'); ?></div>
</div>
<?php
if (has_post_thumbnail()) {
echo '<figure class="thumbnail">' . get_the_post_thumbnail() . '</figure>';
}
?>
</a>
<?php
endwhile;
$pagination = get_the_posts_pagination(array(
'prev_text' => 'Prev',
'next_text' => 'Next'
));
echo preg_replace('/<h2 class="screen-reader-text">[^<]*<\/h2>/ui', '', $pagination);
endif;
?>
</main>
</div>
<?php get_footer(); ?>
タイトル
the_archive_title();
という関数が用意されているので、こちらを使います。
<?php the_archive_title('<h1 class="title">', '</h1>'); ?>
ページ送り
通常ページ送りは以下の様に記述するのですが
the_posts_pagination(array(
'prev_text' => 'Preve',
'next_text' => 'Next'
));
下記のような出力がされます。
<nav class="navigation pagination" aria-label="投稿">
<h2 class="screen-reader-text">投稿ナビゲーション</h2>
<div class="nav-links"><span aria-current="page" class="page-numbers current">1</span>
<a class="page-numbers" href="https://exsample.com/category/uncategorized/page/2/">2</a>
<a class="next page-numbers" href="https://exsample.com/category/uncategorized/page/2/">Next</a></div>
</nav>
このh2の「投稿ナビゲーション」という表示を消してみます。
下記のように文字置換してしまえば、h2は消えます。
$pagination = get_the_posts_pagination(array(
'prev_text' => 'Preve',
'next_text' => 'Next'
));
echo preg_replace('/<h2 class="screen-reader-text">[^<]*<\/h2>/ui', '', $pagination);
出力されるソースコードは以下の通り。
<div class="nav-links"><span aria-current="page" class="page-numbers current">1</span>
<a class="page-numbers" href="https://exsample.com/category/uncategorized/page/2/">2</a>
<a class="next page-numbers" href="https://exsample.com/category/uncategorized/page/2/">Next</a></div>
確認
ページ送りの確認の確認の為に、
管理画面 > 標準設定 > 1ページに表示する最大投稿数を1件にします。
ためしにカテゴリーページ(Uncategorized)を表示してみます。
アーカイブ用のタイトルとページ送りがちゃんと表示されています。
また記事タイトルが画像を押すと、その記事に遷移もできました。
記事タイトルの修正
ここで「カテゴリー: Uncategorized」という表記が気になったので、タイトル部分のコードを修正します。
add_filter('get_the_archive_title_prefix', function ($prefix) {
$prefix = '';
return $prefix;
});
$archve_title = get_the_archive_title();
echo '<h1 class="title">' . $archve_title . '</h1>';
確認すると「カテゴリー:」の部分が無くなりました。
ここまでのコードまとめ
今回はarchive.phpのみ追加しました。
archive.php
<?php get_header(); ?>
<div class="wrap">
<main id="main-content">
<?php
add_filter('get_the_archive_title_prefix', function ($prefix) {
$prefix = '';
return $prefix;
});
$archve_title = get_the_archive_title();
echo '<h1 class="title">' . $archve_title . '</h1>';
if (have_posts()) :
while (have_posts()) : the_post();
?>
<a href="<?php the_permalink(); ?>">
<h2 class="title"><?php the_title(); ?></h2>
<div class="date">
<div>Release date. <?php the_time('Y/m/d'); ?></div>
</div>
<?php
if (has_post_thumbnail()) {
echo '<figure class="thumbnail">' . get_the_post_thumbnail() . '</figure>';
}
?>
</a>
<?php
endwhile;
$pagination = get_the_posts_pagination(array(
'prev_text' => 'Prev',
'next_text' => 'Next'
));
echo preg_replace('/<h2 class="screen-reader-text">[^<]*<\/h2>/ui', '', $pagination);
endif;
?>
</main>
</div>
<?php get_footer(); ?>
ついでにTOPを表示しているhome.phpもarchive.phpのコードを流用してみました。
home.php
<?php get_header(); ?>
<main id="main-content">
<?php
if (have_posts()) :
while (have_posts()) : the_post();
?>
<a href="<?php the_permalink(); ?>">
<h2 class="title"><?php the_title(); ?></h2>
<div class="date">
<div>Release date. <?php the_time('Y/m/d'); ?></div>
</div>
<?php
if (has_post_thumbnail()) {
echo '<figure class="thumbnail">' . get_the_post_thumbnail() . '</figure>';
}
?>
</a>
<?php
endwhile;
$pagination = get_the_posts_pagination(array(
'prev_text' => 'Prev',
'next_text' => 'Next'
));
echo preg_replace('/<h2 class="screen-reader-text">[^<]*<\/h2>/ui', '', $pagination);
endif;
?>
</main>
<?php get_footer(); ?>
まとめ
今回は記事一覧ページを作成してみました。
個人的にタップ数が増えるページ送りは好きじゃないのですが、一覧ページには必要でした。
あとはトピッククラスターが流行っていて、一覧ページの投稿ページ化が流行っていますが、このテーマではそういったカスタマイズはしない予定です。