WordPressで記事一覧ページを作るときによく使われるのが「記事の概要文(抜粋)」です。
この記事では、WordPressのテンプレートタグ get_the_excerpt()
を使って、抜粋(概要文)の出力方法を解説します。
目次
get_the_excerpt()とは?
get_the_excerpt()
は、投稿の抜粋(概要文)を取得するテンプレートタグです。
概要文を「表示する」ためには the_excerpt()
を使いますが、「取得」したいときは get_the_excerpt()
が適しています。
$excerpt = get_the_excerpt();
echo $excerpt;
このように変数に代入できるので、カスタマイズ性の高い出力が可能です。
抜粋の表示ルール
WordPressでは、抜粋が存在する場合はそれが表示されます。
未入力の場合は、本文の冒頭約55語が自動的に生成されます(テーマや設定によって変動あり)。
// 投稿に抜粋があればそれを返す
// なければ本文から自動生成
get_the_excerpt();
実用コード例
投稿一覧ページで概要文を出す例
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<div class="post-summary">
<h2><?php the_title(); ?></h2>
<p><?php echo get_the_excerpt(); ?></p>
</div>
<?php endwhile; ?>
<?php endif; ?>
このように、get_the_excerpt()
を <p>
タグで囲むだけでも、読みやすいレイアウトになります。
以下は、「get_the_excerpt()
がループ外で使えるかどうか」に関する補足説明です。記事の中盤~後半に自然に追加できる内容です。
以下は「get_the_excerpt()
を使った実用コード例」の追加として適した内容です。実際のサイト制作でよくある「特定カテゴリーの最新投稿を概要付きで表示する」パターンを紹介します。
特定カテゴリーの最新3件を概要付きで表示
<?php
$args = array(
'category_name' => 'news', // スラッグで指定
'posts_per_page' => 3,
);
$query = new WP_Query($args);
if ($query->have_posts()) :
while ($query->have_posts()) : $query->the_post(); ?>
<div class="news-summary">
<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<p><?php echo get_the_excerpt(); ?></p>
</div>
<?php endwhile;
wp_reset_postdata();
endif;
このコードは、「news」カテゴリーの最新3件を、タイトルと概要付きで表示する例です。
get_the_excerpt()
を使うことで、一覧ページでも情報を簡潔に伝えられ、ユーザーが読みたい記事を見つけやすくなります。
get_the_excerpt() はループ外では使えない
get_the_excerpt()
は基本的にはループ内で使用することが前提の関数です。
これは、関数内部でグローバル変数 $post
に依存しているためです。
ただし、ループ外で使用したい場合は、setup_postdata()
で $post
を設定することで利用可能になります。
例:ループ外で特定の投稿の抜粋を取得
$post_id = 123; // 任意の投稿ID
$post = get_post($post_id);
setup_postdata($post);
$excerpt = get_the_excerpt();
echo $excerpt;
wp_reset_postdata();
このように、ループ外で使う場合は $post
を明示的に取得し、setup_postdata()
を使ってグローバル状態を一時的に整える必要があります。
処理後は wp_reset_postdata()
を忘れずに呼び出しましょう。
文字数をカスタマイズしたいとき
標準の抜粋文字数(55語)を変更したい場合、以下のようにフィルターを使います。
function custom_excerpt_length($length) {
return 100; // 単語数
}
add_filter('excerpt_length', 'custom_excerpt_length');
また、末尾の「[…]」を変えたい場合は次のフィルターを使います。
function custom_excerpt_more($more) {
return '...';
}
add_filter('excerpt_more', 'custom_excerpt_more');
ACFなどでカスタムフィールドの抜粋を表示したい場合
get_the_excerpt()
はデフォルトの投稿本文をベースにしているため、カスタムフィールドに対応するには get_field()
と併用し、自前で短く加工する必要があります。
$custom_text = get_field('custom_summary');
$trimmed = wp_trim_words($custom_text, 30, '...');
echo $trimmed;
注意点とおすすめの使い方
get_the_excerpt()
をそのまま使うと HTML タグは自動で除去されます- 改行や画像は含まれず、あくまでテキストのみになります
- 美しい見た目にするには CSS と組み合わせて調整するのが鍵です