WordPress 一覧表示時の抜粋とサマリー

このエントリーをはてなブックマークに追加

ここまでのエントリーでは、インデックスの表示時にエントリーから最初の160字を表示するように、 the_excerpt() と function.php に文字数カスタマイズのフィルターフックを追加して表示を調整していました。

しかし、自分の意図したところで途切れないという理由から、カスタマイズを進めているうちに、分離したほうが便利なんだけどなーという考えに変わっていきました。

ここまでの指定

これまでは下記のような指定で一覧表示時はサマリーを表示するようにしていました。抜粋枠も利用せず、一覧のテンプレートには the_content() をいれてました。

functions.php

function custom_excerpt_length() {
  return 160;
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );

自動でサマリーの表示となってくれるのは、無精の自分にとって、とても便利な機能になっていたのですが、ちゃんと分けて入れるところを利用するなら、問題はないかと考えるようになりました。

<!-- more --> の利用は?

<!-- more --> を使うことも視野にいれてみたのですが、それはかなり初期のころに利用してみていたのですが、入れ忘れが多く、結局使わなくなってしまったという経験があったので、今回もその利用は検討には入れず。

単純に抜粋にいれるだけ

一覧で自分の好きな区切りで好きなタグでまとめて表示をさせるためには、単純に 抜粋 の枠に投稿内容をいれるだけです。

これまでの設定も残しておくことで、抜粋に入れ忘れても、その場合は本文から自動で160でサマリーを作成してくれます。

singleページ

抜粋の利用をするにあたって、一覧ではなくて、singleページでは以下の様なテンプレートに変更しました。

single.php:追記参照、こちらは利用しないように

<?php the_excerpt(); ?>
<?php the_content(); ?>

単純に 抜粋 + 本文 となるようにしました。入力欄を2つ利用しなければならないのは、前のブログと一緒だったりするので、個人的にはこの仕組がしっくりきそうです。

追記:二重表示をしないようにするために

上記のままでは詳細表示のときに抜粋がない場合に本文のサマリーも表示されるし、本文自体も表示されるという状態になってしまっていました。二重に表示されないために、抜粋ががあるときのみ抜粋を表示するように分岐をする必要があります。

条件式は難しくなく、 has_excerpt() を使います。

single.php:修正後

<?php if( has_excerpt() ) { the_excerpt(); } ?>
<?php the_content(); ?>