mb_strimwidth関数は第一引数に対象文字列、第二引数に取得開始位置の数値、第三引数に取得する文字列の幅(数値)、第四引数に文字を切り出した場合に末尾に追加する文字列を指定します。第五引数にエンコーディングが指定できますが、省略すると内部文字エンコーディングを使用します。
第三引数で指定する取得する文字列の幅(数値)は、半角文字と全角文字で長さが変わります。半角文字は1文字で1文字、全角文字は1文字で2文字となります。同様に文字省略で使用するmb_substr関数は、半角文字も全角文字も1文字は1文字としてカウントします。
第四引数で指定する文字を切り出した場合に末尾に追加する文字列は、mb_strimwidth関数独自の仕様です。mb_substr関数にはありません。なお末尾に追加した文字列も、第三引数の切り出す文字列の幅にカウントされます。
mb_strimwidth関数は指定対象文字列を0から始まる取得開始位置から、1から始まる取得する文字列の幅の分だけ切り出して、末尾に追加する文字列を加えた文字列を返します。
mb_strimwidth('対象文字列','取得開始位置の数値','取得する文字列の幅(数値)','末尾に追加する文字列');
WordPressの投稿ページで、h1タグに投稿タイトルの初めの25文字を出力します。functions.phpに記述したlongTextCutter関数を呼び出します。
//functions.php
function longTextCutter($num = 0, $arg) {
if (!$arg) return;
$arg = strip_tags($arg);
return mb_strimwidth($arg, 0, $num, "…", 'UTF-8');
}
//single.php
<h1><?= longTextCutter(52, get_the_title()) ?></h1>
全角文字25文字の切り出しを想定しているので、mb_strimwidth関数の第三引数に「52」を設定しているのがポイントです。50ではなく52になっているのは第四引数の「…」を2文字分としてカウントするためです。
