メニュー

functions.phpでタイトルや本文の文字数を制限する方法

2020.11.11

WordPress開発をする際にお知らせ一覧など作るときに本文の一部だけを表示させたい、タイトルテキストの文字数が長すぎるとレイアウトが崩れてしまうのが心配なので文字数を制限したいなどといった要望があると思います。そういった時に使えるテクニックをご紹介します。

本文の抜粋テンプレートタグthe_excerpt()を制御

抜粋の機能を使って本文を一部表示することも可能です。抜粋は本来であれば投稿画面の抜粋欄のものを読み込みます。もし抜粋を入力していない場合は投稿内容の最初の55個の単語までを表示します。詳しくはコチラ

<?php the_excerpt(); ?>

WordPressのテンプレートタグであるthe_excerpt()を使えば上記のルールにのっとって抜粋のテキストが読み込まれますが、ここの文字数を制御したい場合は

//抜粋の文字数調整
function my_excerpt_length($length) {
  return 80;
}
add_filter('excerpt_length', 'my_excerpt_length');

//抜粋の省略記号
function my_excerpt_more($more) {
  return '…';
}
add_filter('excerpt_more', 'my_excerpt_more');

上記の方法で文字数と、省略した際の記号の指定が可能です。

文字数制限用の関数を自作

抜粋の場合は本文だけの適用になってしまいますが、タイトルも制限することを考えるといっそのこと文字数を制限する関数を自作してfunctions.phpに入れておけば様々なシーンで使いまわせるので大変便利です。

/*-----------------------------------
 文字数制限用
-----------------------------------*/
function text_restriction( $text, $count, $change ) {
  //取得したテキストのショートコードやhtmlを削除
  $get_txt = strip_tags(strip_shortcodes( $text );
  //文字が指定数を超えているか判別
  if( mb_strlen( $get_txt, 'UTF-8' ) > $count ){
    $rtxt = mb_substr( $get_txt, 0, $count, 'UTF-8' ) . $change;
    return $rtxt;
  } else {
    return $get_txt;
  }
}

上記のコードは、テキストが指定された文字数を超えてなければそのまま返す、超えていれば制限して省略記号を返すといった処理を行っています。そのままfunctions.phpに追記すれば、テンプレート内でtext_restriction()が使えるようになります。

関数内では、本文など受け取ったテキストにショートコードやHTMLが含まれていると表示が崩れてしまいますので、strip_tags()とstrip_shortcodes()で取り除いてます。運用によっては取得したテキストに他にも余計なものが入る可能性もありますので適宜調整いただければと思います。

引数は三つ、$textにはテキストを、$conutには制限する文字の数を、$changeには文字が制限されたときに最後に表示する表示記号などを入れます。

<?php echo text_restriction( get_the_title(), 60, '...' ); ?>

使用例です。$textの部分にget_the_title()を入れてタイトルを指定してます。文字数制限は60文字、省略記号は「…」が入ります。

get_the_title()が入っている箇所を変更すれば他のシーンでも流用できます。

WordPressには便利なテンプレートタグが多数用意されているものの、用途によってはかゆいところに手が届かなかったりしますので、そういったときはテンプレートタグと自作関数を併用していけば良いかと思います。

関連記事