WordPressで表示させる文字数を制限する

投稿一覧を表示させる際に、タイトルや記事本文の文字数を制限したいことがあると思います。表示する文字数を指定する方法はいくつかありますので、それぞれどのようなコードの書き方をすれば良いのかメモしています。

WordPressテンプレートタグを使って文字数を制限

WordPressには抜粋を表示させられるテンプレートタグが用意されています。
ここでは wp_trim_words()the_excerpt() を使って抜粋テキストを表示させる方法をご紹介します。

wp_trim_words() は特定の文章から指定された文字数にトリミングして表示します。
the_excerpt() は投稿の抜粋フィールドに指定したテキスト、もしくは本文の冒頭の文章を抜粋して表示します。

「本文の冒頭文章から文字数を制限して表示させたい」場合は、wp_trim_words() でも the_excerpt() どちらも使えます。ただし、the_excerpt() は抜粋フィールドに入力している場合はそちらが優先されるので、こちらに入力してる場合は wp_trim_words() を使用する必要があります。

タイトルなど本文の冒頭以外のテキストを指定して文字数を制限したい場合は wp_trim_words() を使用します。

wp_trim_words

wp_trim_words() は、指定した文章を任意の文字数にトリミングするWordPress関数です。文字列の末尾に文字を指定することもできます。

「表示させる文字数の上限」は初期では55文字に設定されています。55文字でよければトリミングする文字列を設定するだけでも大丈夫です。切り取られた文字列の後には「…」が表示されます。

wp_trim_words(トリミングする文字列)

「トリミングする文字列」には get_the_title()get_the_content() などを入れることができます。他にも取得したい文字列を入れることで応用できます。

$honbun = get_the_content();
wp_trim_words($honbun, 100, '続きを見る');
wp_trim_words(トリミングする文字列, 表示させる文字数の上限, 切り取った文字列の後に追加する文字);

the_excerpt で文字数制限

the_excerpt() は投稿の「抜粋」欄に入力した文字を出力する関数です。
抜粋欄に何も入力されていなければ、記事の文頭から110字を抜粋して表示します。110字以降の文字はトリミングされ、末尾に […] が表示されます。

<?php the_excerpt(); ?>

文字数を変更したい場合は functions.php で以下のような記述が必要です。

function my_excerpt($length) {
  return 60; // ここの数字を表示させたい文字数に合わせる
}
add_filter('excerpt_mblength', 'my_excerpt');

この方法の注意点は、抜粋欄に入力されている場合はテキストがトリミングされず、入力したテキストが全て表示されます。

wp_trim_words() でも the_excerpt でも文字数が思うように取り出せない場合は、WP Multibyte Patch プラグインを使用してみてください。

【参考】WP Multibyte Patchとは?

PHPの関数を使って文字数を制限

WordPressのテンプレートタグでも十分トリミングできるのですが、用途に合わなかったりうまく表示できない場合もあるかもしれません。
そんな時はPHPの関数を利用して文字数制限する方法もあります。

【本文の文字数を制限するコード例】

<?php
  $post_cont = strip_tags(get_the_content());
  $excerpt_cont = str_replace(array("\n", "\r\n"), '', $post_cont);
  $text_limit = '60'; //表示させたい文字数

  // 60文字より多ければ60字の後は「...」を表示、そうでなければ「...」はつけない
  if(mb_strlen($post_cont) > $text_limit) {
    $excerpt_cont= mb_substr($post_cont, 0, $text_limit);
    echo $excerpt_cont. '...';
  } else {
    echo $post_cont;
  }
?>
$post_cont = strip_tags(get_the_content());

strip_tags はHTMLやPHPタグ、取り除くことができるPHP関数です。ここで出力させたくないHTMLタグを取り除いておきます。特定のタグは除外しないように設定することも可能です。

$post_cont = strip_tags(get_the_content(), '<br>');
$excerpt_cont = str_replace(array("\n", "\r\n"), '', $post_cont);

str_replace は文字列を置換するPHP関数です。ここでは改行を表示させないように指定しています。
strip_tags でHTMLタグを削除した場合、<p>タグの段落部分でスペースが表示されてしまうのでそれを取り除くのにも有効です。
よりすっきりした表示をさせるならこちらの記述も忘れないようにしておきましょう。

if(mb_strlen($post_cont) > $text_limit)

mb_strlen もしくは strlen で文字列の長さを取得し、$text_limit に指定した数を超えた場合、という条件分岐になります。

mb_strlen は「文字数」で取得。半角でも全角でも1文字は「1」で返されます。
strlen は「バイト数」での取得。半角一文字で1バイト、全角なら2バイトとなります。

$excerpt_cont= mb_substr($post_cont, 0, $text_limit);

mb_substr は文字列の一部を取得するPHP関数です。ここで、0〜 $text_limit で指定した60字までの文字を取得しています。

上記のサンプルコードでは変数や条件分岐を使ったので長くなってしまいましたが、ループ内でタイトルを文字数制限して表示させるだけなら、以下のような簡潔なコードでも表示させることができます。

<?php
  echo mb_substr($post->post_title, 0, 20);

// 末尾に「...」をつける場合
  echo mb_substr($post->post_title, 0, 20). '...';
?>

カテゴリー : WordPress

TOPへ