the_excerpt()関数の文字数をテンプレートファイルごとに変える方法

メモ
WordPressの関数にthe_excerpt()というのがある。
今回はこの関数によって抽出される文字数をテンプレートファイルごとに変える方法を解説しよう。

このような技術的な内容だと、あまりアクセスの増加に貢献しないのが残念である。

the_excerpt()関数とは

まず最初に説明しておきますと、この関数は投稿記事の冒頭の文章を抜粋して表示するためのWordPress独自関数である。
その際に抽出される文字数は日本語環境の場合は「110文字まで」となっている。

WordPress 日本語版では、この問題を含むマルチバイト関連の問題に対処するために WP Multibyte Patch プラグインを同梱しています。このプラグインを使用すると、110文字まで(設定により変更可)を抜粋文として出力できます。 テンプレートタグ/the excerpt – WordPress Codex 日本語版

抜粋欄に入力がある場合はそちらが優先される

このブログのトップページでも以下の部分でthe_excerpt()関数を使用しています。
トップページの抜粋文

明らかに110文字よりも少ないのはどうしてかと言いますと、管理画面での「抜粋」欄を使用しているからです。
抜粋の記入欄
つまり、本来ならば投稿記事の本文の冒頭から110文字が抽出されてthe_excerpt()関数を使用した部分に表示されるわけですが、「抜粋」欄に記入がある場合はそちらが優先されるわけです。

この「抜粋」欄が管理画面上に無い場合は右上にある「表示オプション」タブを開いて「抜粋」のチェックボックスをクリックすれば、画面を更新しなくてもすぐに表れます。
表示オプションの設定

the_excerpt()で抽出される文字数を変更する方法

the_excerpt()関数で抽出される文字数は上で述べたように110文字である。
この文字数を変更するにはWordPress Codex 日本語版のページにもあるように以下のコードをfunction.phpに記入すればよい。

function custom_excerpt_length( $length ) {
  return 20;	
}	
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );

テンプレートファイルごとに文字数を変える方法

さて、ここからが今回の本題である。
このthe_excerpt()関数で抽出される文字数をテンプレートファイルごとに変えたい場合がある。
そのような場合は上記のコードを以下のように変更すれば可能です。

function custom_excerpt_length( $length ) {
  
  if ( is_front_page() ) {
    return 60;	
  } elseif ( is_search() ) {
    return 40;	
  } else {
    return 20;  
  }
  
}	
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );

見てもらうとわかるように新たなフックなどを使う必要はなく、ただ条件分岐でreturnさせる文字数を振り分けているだけである。

上記のコードの内容を一応説明しておきますと、フロントページ(front-page.php)の場合は60文字、検索結果ページ(search.php)では40文字、それ以外のページでは20文字がthe_excerpt()関数によって表示されることになります。

WordPressに慣れてくると何か追加するのにも「自分が知らない特殊なフックで実現するのかな!?」と考えてしまいがちになりますが(私だけ!?)、このような初歩的なやり方で簡単に実現可能だったりすることがありますね。