the_excerpt()
投稿の抜粋を表示。
2023/10/22

WordPressで投稿一覧の各記事に本文を少しだけ表示させたい場合が多くあります。自分でテーマを作る際には何文字まで表示させるか、ということを設定をしないと全文表示されてしまいます。
そこで本文を抜粋をして表示してくれるのが the_excerpt()
というテンプレートタグです。
使い方
【構文】
the_excerpt()
【返り値】なし。指定された短いテキストを表示。
ループ内で使用します。
パラメーターはありません。
使用例
ループ内で <?php the_excerpt(); ?>
とを記述すれば良いだけなので、簡単に設定できます。
例えばトップページに投稿記事一覧を表示させる時、以下のようなコードなら記事のタイトルと抜粋が表示されます。
<h2>記事一覧</h2>
<?php
$args = array(
'post_type' => 'post',
'posts_per_page' => 3,
'no_found_rows' => true,
);
$my_posts = new WP_Query($args);
?>
<?php while($my_posts->have_posts()): $my_posts->the_post(); ?>
<ul>
<li><a href="<?php the_permalink(); ?>">
<p><?php the_title(); ?></p>
<p><?php the_excerpt(); ?></p>
</a></li>
</ul>
<?php endwhile; ?>
抜粋として表示されるテキストと文字数
the_excerpt()
で出力されるのは、投稿画面で設定できる「抜粋フィールド」に入力したテキスト、そこに記載がなければ本文の冒頭のテキストです。

抜粋欄に入力されていればその全文が表示されます。文字数の制限はありません。
入力がない場合は本文の冒頭110字が抜粋され、110字以降は [...]
という記号になります。ショートコードやHTMLタグ、画像は表示前に削除され、文字数としてカウントはされません。
デフォルトで設定されているのは「55」で、これは英語など一つの単語の区切りがはっきりしている言語に当てはまります。そして文字数ではなく「55単語」です。例えば、’hello world’ なら2単語として数えられます。
通常の出力文字数は、一般設定にあるサイト言語の設定によって表示される文字数が変わるのかと思います。私がWordPress6.3.1バージョンで確認した際は、言語を「日本語」に設定し、the_excerpt()
で出力したら110字で表示されました。試しに言語を「英語」に変更し、英語のテキストを入力したら55単語で表示されました。
言語によって出力される文字数が異なることを覚えておくと、 the_excerpt
の出力内容をカスタマイズするときや思った通りの文字数が表示されない時に対応がスムーズにいくと思います。
投稿編集画面に抜粋が表示されない
投稿画面に抜粋が表示されない場合、投稿画面のオプションを確認してみてください。
右上の3点リーダーから「設定」をクリックし、「パネル」に移動します。ここで抜粋のところにチェックが入っていなければ表示されません。ONにしましょう。


この設定のところにも抜粋が表示されていない場合、functions.php に以下のような記述がある可能性もあります。
remove_post_type_support('post', 'excerpt');
この記述は投稿画面に表示される抜粋機能をOFFにするものです。もしこの記述があれば、コメントアウトして表示されるか確認してみてください。
the_excerpt() のカスタマイズ
the_excerpt()
で出力される文字数や [...]
の記号を変更したいこともあると思います。
the_excerpt()
は、the_excerptフィルターを通して get_the_excerpt()
の内容を出力させる関数です。
function the_excerpt() {
echo apply_filters( 'the_excerpt', get_the_excerpt() );
}
the_excerpt | Hook | WordPress Developer Resources
そのため内容をカスタマイズするには、それぞれ設定されているフィルターフックを使用して変更します。コードは functions.php に記述します。
フィルターフックを利用して文字数を変更
文字数を変更するには excerpt_length
フィルタを使用します。
function my_excerpt_length($length) {
return 60; // ここの数字を表示させたい文字数に合わせる
if(is_category()) { // 別の文字数で設定したいページがあれば
return 50;
}
}
add_filter('excerpt_length', 'my_excerpt_length');
もしこのコードで指定した文字数が表示されない場合、WP Multibyte Patch プラグインを導入していなければ追加してみてください。
プラグインを追加したら excerpt_mblength
というフィルターフックにします。
add_filter('excerpt_mblength', 'my_excerpt_length');
プラグインの内容については下記記事が参考になります。
日本語サイトなら導入しておくとさまざまな場面で役立つプラグインです。もしそれでもプラグインは入れたくない場合は「フィルターフックを使わず表示内容を変更」の方法で変更してみてください。
フィルターフックを利用して末尾の記号テキストを変更
末尾につく [...]
の文字を変更する場合は excerpt_more
フィルタを使用します。
function my_excerpt_more($more) {
return '...';
}
add_filter('excerpt_more', 'my_excerpt_more');
return
のところに表示させたいテキストを設定してください。末尾に何もつけたくない場合は return '';
にします。
デフォルトではこのテキストにはリンクが付いていません。リンクをつけたい場合は以下のようなコードで設定することができます。
function my_excerpt_more($more){
global $post;
return '<a href="'. get_permalink($post) . '"> ...【続きを読む】</a>';
}
add_filter('excerpt_more', 'my_excerpt_more');
フィルターフックを使わず表示内容を変更
上記の方法では一括で文字数を変更することができますが、各テンプレートファイルでコードを記述したい場合や、ページの中でも一部分だけ文字を変更したい場合なんかには get_the_excerpt()
と php関数の mb_substr()
を組み合わせで変更する方法もあります。
<?php echo mb_substr(get_the_excerpt(), 0, 60) . '...'; ?>
mb_substr(抜粋を取得, 切り取りを開始する文字の位置, 切り取る文字数)
これは「抜粋を取得して、さらにその取得した文を60文字で切り取る」という指定をしたコードです。. '…'
の部分では末尾に表示される文字を追加出力しています。