お知らせ一覧ページなどのアーカイブページで、WordPress関数「the_excerpt()」により表示される抜粋文の文字数制限を変更する方法を3つ紹介します。
抜粋文のデフォルトの文字数制限について
WordPress関数「the_excerpt()」で表示される文字数にはデフォルトで制限がかかっています。
日本語の場合、「the_excerpt()」で表示される文字数は110文字です。
これ以上の長さの抜粋文は[…]で省略されます。
事前準備:プラグイン:「WP Multibyte Patch」をインストール
抜粋の文字数を変更する場合には、WordPressプラグインの「WP Multibyte Patch」をインストールしておいて下さい。
このプラグインがないと文字数が正しく表示されない場合があります。
方法1:functoins.phpに一筆書く
この方法にはいくつかありますが、簡単な方法はfunctions.phpに一筆書くものです。
文字数制限のためにfunctions.phpに書くコードは下記のとおりです。
/*----------------------------------------------------------*/
/* 投稿の抜粋文の文字数制限 */
/*----------------------------------------------------------*/
add_filter( 'excerpt_length', function( $length ){
return 70; //returnの後ろに最大表示文字数を書く。この場合は70文字
}, 999 );
例えば、上のコードでは抜粋表示は最大70文字で、それ以上の長さになると[…]で省略されます。
抜粋が文字数制限以上にある場合の省略表記変更
抜粋文が上で設定した文字数以上ある場合には、デフォルト設定では文末が[…]のように表示されます。
これを … に変更したい場合には下記のようにfunctions.phpに記述します。
// 省略記号を「…」に変更する
add_filter( 'excerpt_more', function( $more ){
return '…';
}, 999 );
方法2:WordPress関数で文字数制限する
下のWordPress関数「wp_trim_words()」を使うと、抜粋やタイトル、あるいはコンテンツ本文の文字数を制限することができます。
<?php echo wp_trim_words( get_the_excerpt(), 60, '...' ); ?>
- 第1引数:get_the_excerpt()、get_the_title()、get_the_contentなどのテキストを読み込むWordPress関数
- 第2引数:制限したい文字数/上の例では60文字まで表示
- 第3引数:文末の表示方法/上の例では「…」と表示される。ちなみにデフォルト設定では「[…]」
エスケープ処理する場合
必要なのか微妙なところですが、エスケープ処理する場合には下記のようになります。
<?php echo esc_html(wp_trim_words( get_the_excerpt(), 63, '...' )); ?>
方法3:PHPで文字数制限する
この場合にはfunctions.phpへの記述は必要ありません。抜粋を表示させる部分に直接書きます。(ほとんどの場合はアーカイブページ等のループの中だと思います)
先にコードを書いておきます。
<?php
$post_cont = strip_tags(get_the_excerpt());
$excerpt_cont = str_replace(array("\n", "\r\n"), '', $post_cont);
$text_limit = '50'; //表示させる文字数の制限
// 制限した文字数より読み込むテキスト量が多い時は、文末は「...」で省略
if(mb_strlen($post_cont) > $text_limit) {
$excerpt_cont= mb_substr($post_cont, 0, $text_limit);
echo $excerpt_cont. '...';
} else {
echo $post_cont;
}
?>
補足すると、2行目の「get_the_excerpt()」の部分は、抜粋以外にコンテンツやタイトル等のテキストにも使えます。
この方法であれば、「投稿ページ」と「カスタム投稿タイプ」の各アーカイブページで別々に抜粋の文字数制限が可能となります。
- strip_tags():文字列から HTML および PHP タグを取り除く
- str_replace():文字列を置換|上では改行を無効化して表示
- mb_strlen():文字列の長さを取得|変数$text_limitを超える場合に条件分岐
ここでは自分の忘備録として簡潔にまとめましたが、参考にしたブログでは非常に丁寧に解説されています。リスペクトしてリンクを貼らせて頂きます。深く理解したい方は是非参照なさって下さい。