menu

Web制作のTipsとかアレコレ。

[WordPress]抜粋がパラメータを取らないので、自力で文字数を丸める。

2014.03.03

ワードプレスの「抜粋=Excerpt」は便利なのですが、Codexを見たところ、the_excerpt()関数は「パラメータを取らない」らしいです。
日本語版では、デフォルトで同梱されているWP Multibyte Patchプラグインにより、110文字までが抜粋文として出力されるようなのですが、いやいや、もうちょっと短く全角80文字で出力したかったのです。

というわけで、文字数を丸める関数を作っておくことにします。

使うPHP関数は、mb_strimwidthです。
この関数は半角を1文字、全角を2文字としてカウントしてくれるので、マルチバイト文字圏の我々にはとてもありがたいですね。

ということで、以下。

functions.php

function trim_string_length( $str , $length = 160 , $marker = "...") {
    $length > 220 ? 220 : $length ;
    $length < 10 ? 10 : $length ;
    $newstr = mb_strimwidth( $str, 0, $length, $marker, "UTF-8");
    return $newstr;
}

デフォルトで$lengthを160文字(全角換算で80文字)としておきました。
上に書いたとおり、デフォで最大全角110文字ということで、もし何か間違えて半角換算220文字以上の場合があっても220文字で収めるようにしておきます。
ほんで、あんまり短か過ぎてもアレなので、10文字未満の指定は10文字で。この辺は用途によってどうにでもして下さい。万一マイナス値が入った場合は正の数に直すようにしておいた方がいいですね。

phpファイルは

echo apply_filters('excerpt', trim_string_length( get_the_excerpt()));

抜粋を取得して表示する際、通常は

the_excerpt();

のみで出すと思うのですが、この場合は出力せず関数に渡してやるので、【get_the_excerpt()】の方を使います。
そして、ショートコードの処理などのことも考えて、本来the_excerpt()関数で通すフィルターには通しておくことにします。
引数は必要に応じて与えましょう。

trim_string_length( get_the_excerpt(), 100, "...続きを読む")

とか。

ちなみに、mb_strimwidth関数では、マーカー(…とか)も文字数に入ります。
ですから、”…続きを読む”と入れると、これで半角13文字分は食っちゃいますので注意が必要です。

Comments

please leave your comment...

▲ Page Top