WordPress の記事一覧やウィジェットで表示される「抜粋(excerpt)」は、デフォルトでは 55 語にカットされ、最後に [...] が自動的に付与されます。英語サイト向けの仕様であるため、日本語サイトでは長すぎたり、逆に短く感じることも少なくありません。ここでは、抜粋の長さと省略記号をカスタマイズする方法を解説します。
抜粋の長さを変更する
抜粋の長さ(正確には「単語数」)を制御するには、excerpt_length フィルターを使います。
<?php
// 抜粋の長さを 80 に変更
add_filter('excerpt_length', function ($length) {
return 80;
}, 999);
抜粋を生成する
wp_trim_words()関数には2つの分岐があり、現在の言語ロケールの「単語カウント方式」が文字数ベースに設定されている場合は、実際の文字数を1文字単位で正確にカウントして切り詰めます。日本語ロケール(ja)はこの文字数ベースを返すようWordPress側で設定されているため、サイトが日本語ロケールで正しく動作していれば、上記コードの「80」は「だいたいの目安」ではなく正確に80文字で切り詰められます。一方で、サイトが日本語ロケールで正しく動作していない場合(言語ファイルの破損、ロケール未設定など)は、空白区切りの単語分割にフォールバックします。日本語の文章には空白がないため、文章全体が実質的に「1単語」として扱われてしまい、
excerpt_lengthの値をいくら変更しても抜粋が一切切り詰められなくなります。多くの日本語サイトに同梱される「WP Multibyte Patch」プラグインは、まさにこの問題を回避するために独自のexcerpt_mblengthフィルターを提供しています。抜粋が期待通り切り詰められない場合は、サイトの言語設定(管理画面「設定>一般」のサイトの言語)を確認してください。省略記号[…]を変更する
抜粋の末尾に自動で追加される [...] を変更するには、excerpt_more フィルターを利用します。テキストだけでなく、リンクを仕込むことも可能です。
<?php
// 抜粋の省略記号を「…続きを読む」に変更
add_filter('excerpt_more', function ($more) {
return '...続きを読む';
});
ボタン風にリンクを追加したい場合は以下のように書けます。
<?php
add_filter('excerpt_more', function ($more) {
global $post;
return '... <a href="' . get_permalink($post->ID) . '" class="read-more">続きを読む</a>';
});
テーマで直接抜粋を制御する場合
自動生成された excerpt ではなく、the_excerpt() を呼び出して独自にカスタマイズしたい場合、wp_trim_words() を使うと柔軟に文字数と末尾を指定できます。
<?php $content = get_the_content(); $excerpt = wp_trim_words($content, 100, '...続きを見る'); echo '<p class="excerpt">' . $excerpt . '</p>';
この方法なら、記事ごとに統一された抜粋ルールを適用でき、一覧デザインを崩さずに運用できます。
よくある質問(FAQ)
まとめ
WordPress の抜粋はデフォルトのままでは使い勝手が悪く、日本語サイトでは特に調整が必要です。excerpt_length フィルターで長さを変え、excerpt_more フィルターで省略記号やリンクを変更すれば、ユーザーにとって読みやすい記事一覧が作れます。日本語ロケールが正しく設定されていればexcerpt_lengthは正確な文字数として機能しますが、思うように切り詰められない場合はサイトの言語設定を確認しましょう。さらに柔軟に扱いたい場合は wp_trim_words() を活用し、テーマに合わせてカスタマイズするのがおすすめです。

