WordPressのタイトルや抜粋文を主にデザインの関係で省略したい時があると思います。
それを実現する、タイトルや抜粋文の文字数を省略するカスタマイズです。
文字数を省略するスニペット
文字数を省略する方法にPHPのmb_strimwidth()
関数を使います。この関数を使えば文字列を簡単に丸めることが出来ます。第三引数に指定した数(ここでは「80」「140」の部分)でカットされます。
注意したいのは日本語(全角)の場合は1文字2バイト換算な点です。例として、40文字で省略したいなら80、70文字で省略したいなら140と指定します。
もう一つ、第四引数で指定している「”…”」は文字数が省略値に達した時に表示される文字列です。省略時に一切何も表示させたくない場合は「””」と指定して下さい。
参考: PHP: mb_strimwidth – Manual
タイトルの文字数を省略
<!-- そのまま省略したタイトルを出力する場合 -->
<?php echo mb_strimwidth(get_the_title(), 0, 80, "…", "UTF-8"); ?>
<!-- 省略したタイトルを変数に格納する場合 -->
<?php $shortTitle = mb_strimwidth(get_the_title(), 0, 80, "…", "UTF-8"); ?>
<!-- 変数の出力 -->
<?php echo $shortTitle; ?>
抜粋文の文字数を省略
<!-- そのまま省略した抜粋文を出力する場合 -->
<?php echo mb_strimwidth(get_the_excerpt(), 0, 140, "…", "UTF-8"); ?>
<!-- 省略した抜粋文を変数に格納する場合 -->
<?php $shortExcerpt = mb_strimwidth(get_the_excerpt(), 0, 140, "…", "UTF-8"); ?>
<!-- 変数の出力 -->
<?php echo $shortExcerpt; ?>
フィルターフックで文字数を省略する
フィルターフックを利用すると全ページのタイトル、抜粋文の文字数を省略出来ます。(the_title()
やthe_excerpt()
で出力した文字列全てに省略が掛かるようになります)
以下のソースコードをfunctions.phpに記述して下さい。こちらも各々4行目のmb_strimwidth()
の第三引数の数値を変えることで省略する文字数を変えられます。
タイトルをフィルターフックで文字省略
//タイトルの文字省略
add_filter('the_title', 'my_the_title', 10, 2);
function my_the_title($title, $id) {
$title = mb_strimwidth($title, 0, 80, "…","UTF-8");
return $title;
}
抜粋文をフィルターフックで文字省略
//抜粋文の文字省略
add_filter('the_excerpt', 'my_the_excerpt');
function my_the_excerpt($postContent) {
$postContent = mb_strimwidth($postContent, 0, 140, "…","UTF-8");
return $postContent;
}
これら2つのフィルターフック、the_title()
とthe_excerpt()
はwp-includes/post-template.phpの118行目、254行目辺りに記述されています。
自分自身がたまに使うので書いておきました。