Go to top Go to bottom

the_excerpt()get_the_excerpt()で取得した抜粋は、自動的に110文字で省略され、最後に[…]が追加されます。これらはフィルターを用いることで変更することができます。

抜粋の文字数を変更する

抜粋の文字数はデフォルトで55単語、日本語などのマルチバイト文字では110文字になっています。ただし、日本語の抜粋がうまく機能するためには、WP Multibyte Patchプラグインが有効になっている必要がありますので注意してください。

この文字数を変更するには、excerpt_lengthフィルターを利用します。

function twpp_change_excerpt_length( $length ) {
  return 50; 
}

add_filter( 'excerpt_length', 'twpp_change_excerpt_length', 999 );

これをfunctions.phpなどに記載すると、抜粋の長さが50文字に変更されます。文字数を変えるには、2行目の数値を修正します。

filterの第3引数、priorityが999になっていることに注意してください。Codexに記載されている通り、そうでないとWordPressの処理が設定を上書きしてしまいます。

条件分岐を使うと、ページによって抜粋の文字数を変更することも可能です。

function twpp_change_excerpt_length( $length ) {
  $length = 50;

  if ( is_category() || is_tax() ) {
    $length = 100;
  } 

  return $length; 
}

add_filter( 'excerpt_length', 'twpp_change_excerpt_length', 999 );

もっと細かく変更したい場合は、長めの最大値を設定しておき、文字列を任意の文字数で切り出すmb_substr()関数を利用したほうが実用的かもしれません。

<?php echo mb_substr( get_the_excerpt(), 0, 50 ) . '[...]'; ?>

実行すると、抜粋を取得後、さらに50文字で制限をかけます。ただし、上記の処理では抜粋が50文字以下の場合で省略が不要な場合でも[…]が追加されます。

省略記号[…]を変更する

the_excerpt()get_the_excerpt()も、文字数が最大値を超える場合、最後に[…]が自動的に追加されます。この省略記号は、次のようにexcerpt_moreのフィルタを利用して変更することが可能です。

function twpp_change_excerpt_more( $more ) {
  return '......';
}

add_filter( 'excerpt_more', 'twpp_change_excerpt_more' );

2行目で返す文字列を変更すれば、任意の省略記号にできます。さらに、このフィルタを使えば「続きを読む」タグを設定していない投稿でも、抜粋の後にリンクを自動で挿入することができます。

function twpp_change_excerpt_more( $more ) {
  $html = '<a href="' . esc_url( get_permalink() ) . '">[...続きを読む]</a>';
  return $html;
}

add_filter( 'excerpt_more', 'twpp_change_excerpt_more' );

このようにしてthe_excerpt()を呼ぶと、次のような出力が得られます。

抜粋の最後に記事へのリンクを追加する
抜粋の最後に記事へのリンクを追加する