HOME > PHP > アーカイブページ用に記事の文字数を制限して表示したい

アーカイブページ用に記事の文字数を制限して表示したい

アーカイブページやトップページなど、記事一覧で、各投稿の本文の一部だけを表示したい時がある。そこで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とテンプレートタグの合わせ技。なるほど。

参考サイト