【WordPress】記事の抜粋(excerpt)の長さと省略記号[…]を変更する方法

【WordPress】記事の抜粋(excerpt)の長さと省略記号[…]を変更する方法 WordPress

WordPress の記事一覧やウィジェットで表示される「抜粋(excerpt)」は、デフォルトでは 55 語にカットされ、最後に [...] が自動的に付与されます。英語サイト向けの仕様であるため、日本語サイトでは長すぎたり、逆に短く感じることも少なくありません。ここでは、抜粋の長さと省略記号をカスタマイズする方法を解説します。

スポンサーリンク

抜粋の長さを変更する

抜粋の長さ(正確には「単語数」)を制御するには、excerpt_length フィルターを使います。

functions.php:抜粋の長さ変更
<?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 フィルターを利用します。テキストだけでなく、リンクを仕込むことも可能です。

functions.php:省略記号の変更
<?php
// 抜粋の省略記号を「…続きを読む」に変更
add_filter('excerpt_more', function ($more) {
    return '...続きを読む';
});

ボタン風にリンクを追加したい場合は以下のように書けます。

functions.php:続きを読むリンクの追加
<?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() を使うと柔軟に文字数と末尾を指定できます。

テンプレート:wp_trim_words()による独自抜粋
<?php
$content = get_the_content();
$excerpt = wp_trim_words($content, 100, '...続きを見る');
echo '<p class="excerpt">' . $excerpt . '</p>';

この方法なら、記事ごとに統一された抜粋ルールを適用でき、一覧デザインを崩さずに運用できます。

よくある質問(FAQ)

Qthe_excerpt()で表示される文字数を変更するには?
Aexcerpt_lengthフィルターで変更します。add_filter(‘excerpt_length’, function(){ return 150; })のように設定します。日本語ロケールで正しく動作しているサイトでは、この値は正確な文字数として機能します。
Q抜粋末尾の「[…]」を別の文字に変更するには?
Aexcerpt_moreフィルターで変更します。add_filter(‘excerpt_more’, function(){ return ‘…’; })や、「続きを読む」リンクに変更する場合はget_permalink()と組み合わせます。
Q抜粋をHTML付きで表示するには?
Athe_excerpt()はHTMLが除去されます。HTMLを維持した抜粋にはget_the_content()からwp_trim_words()またはmb_substr()を使った独自の抜粋生成が必要です。the_contentフィルターでタグを使う方法もあります。

まとめ

WordPress の抜粋はデフォルトのままでは使い勝手が悪く、日本語サイトでは特に調整が必要です。excerpt_length フィルターで長さを変え、excerpt_more フィルターで省略記号やリンクを変更すれば、ユーザーにとって読みやすい記事一覧が作れます。日本語ロケールが正しく設定されていればexcerpt_lengthは正確な文字数として機能しますが、思うように切り詰められない場合はサイトの言語設定を確認しましょう。さらに柔軟に扱いたい場合は wp_trim_words() を活用し、テーマに合わせてカスタマイズするのがおすすめです。