アーカイブページやトップページなど、記事一覧で、各投稿の本文の一部だけを表示したい時がある。そこでWordPressのテンプレートタグを使って本文から指定の文字数まで記事を抜粋する方法。PHP関数も使用。
記事の一部を抜粋するテンプレートタグを使う
the_excerpt()タグを使うのが最もシンプルで簡単な方法だ。ループ内で以下を記述すればOK。<?php the_content(); ?>の代わりに使うイメージ。
<?php the_excerpt(); ?>
the_excerpt()タグの基本
the_excerpt()タグは記事の概要枠の内容(空の場合は本文で<!–more–>の前まで)を表示するテンプレートタグ。デフォルトの設定のポイントは以下の通り。
- 文字数は、デフォルトで55文字(日本語は110文字※)までが抜き出される
- <p>タグで括られる
- 110文字以上のときは末尾に[…]が表示される
- 本文で<!–more–>を使っている場合はそれ以降の文字は拾われない
※日本語の文字数の正確なカウントにはWP Multibyte Patch プラグインが必須
the_excerpt()タグの文字数やタグ、[…]表示を変更したい
the_excerpt()タグの文字数やタグ、[…]表示を変更したい場合は、functions.phpに追記する必要がある
デフォルトの文字数55を20に変更したい場合は以下をfunctions.phpに追記。
function wpdocs_custom_excerpt_length( $length ) {
return 20;
}
add_filter( 'excerpt_length', 'wpdocs_custom_excerpt_length', 999 );
<p>タグを挿入させたくない場合は以下をfunctions.phpに追記。
remove_filter('the_excerpt', 'wpautop');
末尾の[…]を”続きを読む”に変えたい場合は以下をfunctions.phpに追記。
function wpdocs_excerpt_more( $more ) {
return '<a href="'.get_the_permalink().'" rel="nofollow">続きを読む</a>';
}
add_filter( 'excerpt_more', 'wpdocs_excerpt_more' );
※なお、投稿の概要もしくは本文の一部に”[…]”を付けた状態で返す関数としてget_the_excerpt();がある。
テンプレートタグとPHP関数の合わせ技で好きな箇所で文字数を指定する
PHPには、文字数を指定して文字列を返すmb_substr関数がある。そこでmb_substr関数とを使ってget_the_excerpt();を使って表示する文字数を制限する方法がある。mb_substr関数を使う方法だと、記述したテンプレートだけその文字数になるのがメリット(functions.phpだとテンプレート全体に影響する)。
<?php echo mb_substr(get_the_excerpt(), 0, 60); ?>
- 引数1(上記のget_the_excerpt()のところ):文字列。通常だと”abcdefg”という形で書く
- 引数2(上記の0のところ):何文字目から取り出すか。1文字目からの場合は0と書く
- 引数3(上記の60のところ):何文字取り出すか
- (引数4:文字のエンコーディングを指定できる)
PHPとテンプレートタグの合わせ技。なるほど。