Contents
この章で学ぶこと。
前回は、カスタム投稿(CPT UI)を入れることで、制作実績が投稿できるようになりました。こちらの講座は、DAY.5の続きです。必ずDAY.1から開始し、順番に進めてくださいね。▶︎ DAY.5は、こちらから
アーカイブページとは (archive-works.php)

archive-投稿タイプ名.php
アーカイブページとは、記事の一覧を表示するページです。
今までに書いた記事の全てを表示したり、特定のカテゴリーやタグ、日付の記事のみを一覧で表示したりすることができます。カテゴリーのみの一覧を表示しているものも、カテゴリーアーカイブになります。制作実績をまとめたページは、「投稿タイプスラッグ → テンプレート名」となるため、「archive-works.php」となります。このテンプレートがなければ、制作実績を登録しても表示させることができません。
主なテンプレート例
| 役割 | テンプレート |
|---|---|
| トップページ | front-page.php |
| 固定ページ | page.php |
| 投稿詳細 | single.php |
| 制作実績詳細 | single-works.php |
| 投稿一覧 | archive.php |
| 制作実績一覧 | archive-works.php |
| カテゴリー一覧 | category.php |
| タグ一覧 | tag.php |
| 検索結果 | search.php |
archive-works.php (制作実績一覧)
このテンプレートでは、登録した「制作実績」を一覧で表示します。
- ヘッダーを読み込む
- 制作実績ページの見出しを表示する
- 投稿があるか確認する
- 投稿があれば、1件ずつカード形式で表示する
- 投稿がなければ「まだありません」と表示する
- 最後にフッターを読み込む
<?php get_header(); ?>
<div class="site-container">
<div class="wrap">
<main class="works-archive">
<div class="works-archive__inner">
<h1 class="works-archive__title">制作実績</h1>
<p>
これまでに手がけた制作実績をご紹介しています。
目的やターゲットに応じて、構成やデザインを設計していますので、
各ページの制作意図や工夫した点もぜひご覧ください。
</p>
<!----- 投稿があるか確認する ---------->
<?php if (have_posts()) : ?>
<div class="works-list">
<!--- 投稿を1件ずつ取り出す --------->
<?php while (have_posts()) : the_post(); ?>
<!-- article 1件分 ----->
<article class="works-card">
<a href="<?php the_permalink(); ?>" class="works-card__link">
<?php if (has_post_thumbnail()) : ?>
<div class="works-card__image">
<?php the_post_thumbnail('large'); ?>
</div>
<?php endif; ?>
<div class="works-card__body">
<h2 class="works-card__title"><?php the_title(); ?></h2>
<p class="works-card__text">
<?php
// コンセプトを45文字前後で省略表示
echo wp_trim_words(get_field('concept'), 45, '…'); ?>
</p>
</div>
</a>
</article>
<!-------------------------->
<?php endwhile; ?>
</div>
<?php the_posts_pagination(); ?>
<?php else : ?>
<p>制作実績はまだありません。</p>
<?php endif; ?>
</div>
</main>
</div>
<?php get_footer(); ?>archive-worksのCSSを追加
アイキャッチ画像をそれぞれカード型にマークして、整列させます。
/* =========================
works-archive
========================= */
.works-archive__inner {
width: min(1100px, 90%);
margin: 0 auto;
}
.works-archive__title {
color:#2F2A8B;
font-size:1.5rem;
margin-bottom:1rem;
font-weight:bold;
}
.works-list {
margin:50px 0;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 32px;
}
.works-card {
overflow: hidden;
background: #fff;
border-radius: 16px;
box-shadow: 0 8px 24px rgba(0, 0, 0, .08);
}
.works-card__link {
display: block;
color: inherit;
text-decoration: none;
}
.works-card__image {
aspect-ratio: 4 / 3;
overflow: hidden;
}
.works-card__image img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform .4s ease;
}
.works-card__body {
padding: 24px;
}
.works-card__title {
margin-bottom: 12px;
font-size: 20px;
}
.works-card__text {
color: #555;
line-height: 1.8;
}
.works-card:hover img {
transform: scale(1.05);
}single-works.php (制作実績*1ページ用)
制作実績を1件ずつ詳しく表示するテンプレートです。タイトル、概要、アイキャッチ画像、公開年、担当範囲、制作期間、使用ツール、ターゲット、コンセプト、制作ポイント、サイトURLなど、プラグインACFで登録した値が表示されます。

<?php get_header(); ?>
<div class="site-container">
<div class="wrap">
<main class="works-single">
<div class="works-single__inner">
<!-- タイトル -->
<h1 class="works-single__title"><?php the_title(); ?></h1>
<?php if (get_field('name')) : ?>
<p><strong><?php the_field('name'); ?></strong></p>
<?php endif; ?>
<?php if (get_field('overview')) : ?>
<p><?php the_field('overview'); ?></p>
<?php endif; ?>
<!-- アイキャッチ -->
<?php if (has_post_thumbnail()) : ?>
<div class="works-single__image">
<?php the_post_thumbnail('large'); ?>
</div>
<?php endif; ?>
<!-- ACF情報 -->
<div class="works-single__info">
<!---ACFに入力がある場合だけ表示する --------->
<?php if (get_field('year')) : ?>
<p><strong>公開年:</strong><?php the_field('year'); ?></p>
<?php endif; ?>
<?php if (get_field('role')) : ?>
<p><strong>担当範囲:</strong>
<?php echo implode(' / ', get_field('role')); ?>
</p>
<?php endif; ?>
<?php if (get_field('period')) : ?>
<p><strong>制作期間:</strong><?php the_field('period'); ?></p>
<?php endif; ?>
<?php if (get_field('tools')) : ?>
<p><strong>使用ツール:</strong>
<?php echo implode(' / ', get_field('tools')); ?></p>
<?php endif; ?>
<?php if (get_field('target')) : ?>
<p><strong>ターゲット:</strong><?php the_field('target'); ?></p>
<?php endif; ?>
<?php if (get_field('concept')) : ?>
<p><strong>コンセプト:</strong><?php the_field('concept'); ?></p>
<?php endif; ?>
<?php if (get_field('point')) : ?>
<p><strong>制作のポイント:</strong><?php the_field('point'); ?></p>
<?php endif; ?>
<?php if (get_field('site_url')) : ?>
<p>
<strong>サイトURL:</strong>
<a href="<?php the_field('site_url'); ?>" target="_blank">
<?php the_field('site_url'); ?>
</a>
</p>
<?php endif; ?>
</div>
<nav class="post-navigation">
<div class="post-navigation__prev">
<?php next_post_link('%link', '← 前の実績'); ?>
</div>
<div class="post-navigation__next">
<?php previous_post_link('%link', '次の実績 →'); ?>
</div>
</nav>
<!-- 本文 -->
<div class="works-single__content">
<?php the_content(); ?>
</div>
</div>
</main>
</div></div>
<?php get_footer(); ?>▼ single-worksのCSSを追加
/* =========================
works-single
========================= */
.works-single {
padding: 20px 0;
}
.works-single__inner {
width: min(960px, 90%);
margin: 0 auto;
}
.works-single__title {
margin-bottom: 40px;
font-size: clamp(28px, 4vw, 40px);
line-height: 1.4;
}
.works-single__image {
margin: 50px 0;
border-radius: 16px;
overflow: hidden;
}
.works-single__image img {
width: 100%;
height: auto;
display: block;
}
.works-single__info {
margin-bottom: 56px;
padding: 32px;
background: #f7f7f7;
border-radius: 16px;
}
.works-single__info p {
display: grid;
grid-template-columns: 160px 1fr;
gap: 16px;
margin: 0;
padding: 16px 0;
border-bottom: 1px solid #ddd;
line-height: 1.8;
}
.works-single__info p:first-child {
padding-top: 0;
}
.works-single__info p:last-child {
padding-bottom: 0;
border-bottom: none;
}
.works-single__info strong {
font-weight: 700;
color: #222;
}
.works-single__info a {
color: #0066cc;
text-decoration: underline;
overflow-wrap: anywhere;
}
.works-single__content {
line-height: 1.9;
}
.works-single__content h2 {
margin-top: 56px;
margin-bottom: 20px;
padding-left: 16px;
border-left: 4px solid #222;
font-size: 26px;
}
.works-single__content h3 {
margin-top: 40px;
margin-bottom: 16px;
font-size: 22px;
}
.works-single__content p {
margin-bottom: 24px;
}
.works-single__content img {
max-width: 100%;
height: auto;
border-radius: 12px;
}
/*ページ送り -----------------*/
.post-navigation {
display: flex;
justify-content: space-between;
margin-top: 80px;
padding-top: 30px;
border-top: 1px solid #ddd;
background-color:#eee;
}
.post-navigation a {
color: #333;
text-decoration: none;
font-weight: bold;
}
.post-navigation a:hover {
opacity: .7;
}
@media (max-width: 768px) {
/* =========================
works-single
========================= */
.works-single {
padding: 56px 0;
}
.works-single__title {
margin-bottom: 32px;
text-align: left;
}
.works-single__image {
margin-bottom: 32px;
}
.works-single__info {
padding: 24px;
margin-bottom: 40px;
}
.works-single__info p {
display: block;
padding: 14px 0;
}
.works-single__info strong {
display: block;
margin-bottom: 4px;
}
トップページに最新3件を表示する。
トップページには、制作実績の最新3件だけを表示します。すべての実績を出すのではなく、トップページでは一部だけ見せて、詳しく見たい人には一覧ページへ移動してもらう構成です。

<!--- WORKS
---------------------->
<section class="top-works">
<div class="top-works__inner">
<h2 class="works-heading__title">WORKS</h2>
<p class="works-heading__sub">制作実績</p>
<div class="top-works__list">
<?php
$args = [
'post_type' => 'works',
'posts_per_page' => 3
];
$query = new WP_Query($args);
?>
<?php if ($query->have_posts()) : ?>
<?php while ($query->have_posts()) : $query->the_post(); ?>
<article class="works-card">
<a href="<?php the_permalink(); ?>">
<?php if (has_post_thumbnail()) : ?>
<div class="works-card__image">
<?php the_post_thumbnail('medium'); ?>
</div>
<?php endif; ?>
<h3 class="works-card__title"><?php the_title(); ?></h3>
</a>
</article>
<?php endwhile; ?>
<!---- カスタムで取得した投稿データをリセットして、WordPress本来の状態に戻す --------->
<?php wp_reset_postdata(); ?>
<?php endif; ?>
</div>
<div class="top-works__btn">
<a href="<?php echo home_url('/works/'); ?>">制作実績一覧を見る</a>
</div>
</div>
</section>home_url(‘/works/’)は、サイトURLに /works/ を追加したURLを出力します。
この章では、カスタム投稿タイプ「制作実績」を、実際のページとして表示する方法を学びました。作成したテンプレートは、主に3つです。
archive-works.php
制作実績の一覧ページsingle-works.php
制作実績の詳細ページ- トップページ内の
WP_Query
最新の制作実績を3件だけ表示
カスタム投稿は、登録後に表示させるページに応じてテンプレートを作る必要があります。
