【WordPressテーマの作り方 第8回】投稿の表示をカスタマイズしよう

「投稿をカテゴリー別に並べたい」
「抜粋だけ表示する方法ってある?」
「the_content()以外に使えるタグって?」

今回は、WordPressテーマにおける投稿の見せ方を自由にコントロールするテクニックをご紹介。
「一覧ページを作りたい」「ループをカスタマイズしたい」と思い始めたあなたにぴったりの内容です!

目次

今回のゴール

  • the_excerpt() の使い方とカスタマイズ
  • カテゴリー別に投稿を表示する方法
  • WP_Query を使ったカスタムループの作成

1. 抜粋(the_excerpt)の使い方

the_excerpt() は、投稿の「抜粋」部分を表示するテンプレートタグです。
デフォルトでは、本文の最初の約55単語が出力されます。

<?php
// 抜粋を表示(管理画面で入力がなければ、冒頭の一部が自動で表示される)
the_excerpt();
?>

💡 管理画面で「抜粋」欄にテキストを入れておけば、そちらが優先表示されます。

🔍 the_excerpt()the_content() と違い、基本的に HTML タグやショートコードが除去されたシンプルなテキストを出力します。
HTMLの見出しタグや画像などを含めたい場合は、the_content() の使用も検討しましょう。

🔧 表示される文字数を変えたい!

functions.php に以下を追加すると、文字数を変更できます:

// 抜粋の文字数を変更する(デフォルトは約55単語)
function custom_excerpt_length($length) {
  return 100; // 100文字分に変更(※日本語サイトでは文字数として機能する)
}
add_filter('excerpt_length', 'custom_excerpt_length');

🔧 「…」を変更したいときは?

// 抜粋の末尾に表示される「…」部分の文言を変更
function custom_excerpt_more($more) {
  return '...続きを読む'; // 好きなテキストに変更可能
}
add_filter('excerpt_more', 'custom_excerpt_more');

2. カテゴリー別に投稿を表示する(簡単ループ)

たとえば、**「お知らせ」カテゴリー(slug: news)**の投稿を一覧で出したいとき:

<?php
// 「news」カテゴリーの最新5件を取得する
$args = array(
  'category_name' => 'news',      // カテゴリースラッグで指定
  'posts_per_page' => 5           // 表示件数
);

$news_query = new WP_Query($args);

if ($news_query->have_posts()):
  while ($news_query->have_posts()): $news_query->the_post();
?>
    <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
    <p><?php the_excerpt(); ?></p>
<?php
  endwhile;
  // クエリの影響をリセット(メインループに戻す)
  wp_reset_postdata();
endif;
?>

💡 WP_Query を使えば、「投稿タイプ」「タグ」「日付」など、柔軟な条件指定ができます。

💡 WP_Query では 'orderby' => 'rand''meta_query' を使って、表示順やカスタムフィールド条件での絞り込みも可能です!

💡 カテゴリーの「スラッグ」は、管理画面の「投稿 > カテゴリー」から確認・編集できます。

3. 投稿ループをカスタマイズしよう

たとえば、カスタム投稿タイプ blog でタグ design の記事を3件だけ取得するには:

<?php
// カスタム投稿タイプ「blog」から、タグ「design」が付いた記事を3件取得
$args = array(
  'post_type' => 'blog',          // 投稿タイプを blog に指定
  'tag' => 'design',              // 「design」というタグのスラッグを指定(※管理画面で設定されたスラッグ名を使います)
  'posts_per_page' => 3           // 表示件数
);

$blog_query = new WP_Query($args);

if ($blog_query->have_posts()):
  while ($blog_query->have_posts()): $blog_query->the_post();
?>
    <div class="blog-box">
      <h3><?php the_title(); ?></h3>
      <p><?php the_excerpt(); ?></p>
    </div>
<?php
  endwhile;
  wp_reset_postdata(); // クエリの影響をリセット
endif;
?>

4. よくある注意点

  • WP_Query を使ったら、必ず wp_reset_postdata() を実行すること(メインクエリへの影響を防ぐ)
  • the_content() はHTMLタグ付き、the_excerpt() はタグなしになる
  • the_excerpt() 使用時、「続きを読む」リンクを自作で付けるのが一般的です

💡 例えば、以下のようにリンクを組み合わせて表示するのが定番です:

<p>
  <?php the_excerpt(); // 抜粋表示 ?>
  <a href="<?php the_permalink(); ?>">続きを読む</a> <!-- 個別ページへのリンク -->
</p>

🎨 テーマデザインに合わせて、リンクにクラスを追加するのもおすすめです:

<a class="btn-more" href="<?php the_permalink(); ?>">続きを読む</a>

✅ まとめ

用途よく使うタグ/方法
投稿本文の出力the_content()
抜粋の出力the_excerpt()
投稿一覧のカスタム表示WP_Query + while ループ
抜粋文字数の変更excerpt_length フィルター
「続きを読む」のテキスト変更excerpt_more フィルター

💡 抜粋はデザイン性を損なわず一覧を整えるのに便利です。投稿の雰囲気を伝える“要約”として積極的に活用しましょう。

🔍 さらに深掘りしたい人向け

  • pre_get_posts を使えば、既存の投稿一覧をカスタマイズ可能
  • query_posts() は基本的に使わない!(ページネーションが壊れるので注意)

⚠️ query_posts() はメインのクエリを上書きしてしまうため、ページネーションやテンプレートの動作が正しく行われなくなるケースが多く、非推奨です。

📝 次回予告:「固定ページのテンプレートを作ろう」

次回は、「会社概要」や「お問い合わせ」などの固定ページに専用テンプレートを割り当てる方法を解説します!
会社概要・サービス紹介・アクセスページなど、情報固定型のページに最適です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Web制作会社勤務、業界歴10年以上。現場を走り回ってきた制作者。
これからWeb制作を学ぶ人に寄り添いながら、実務で役立つ知識をわかりやすくシェアします。
「ゼロぐらいから学べる!」をモットーに、あなたの“がんばろ”を応援します!

目次