テーマカスタマイズ
Wordpressのタイトルや本文の文字数を制限して出力する
2019.02.08
いろいろ調べてみましたが文字コードがUTF-8で全角半角入り混じると文字数をぴったり合わせるのはなかなか骨のようです。ちなみに調べてる途中で覚えたのですが文字数を制限して出力することを文字を丸めるっていうんですね!知りませんでした!調べ物をするときにこう言った単語を知っている方が有利ですよね。
PHPのmb_strimwidth関数で制限する
PHPで文字数をカウントする関数は以下の通りで今回はmb_strimwidth
を使います。
substr | 半角1バイト、全角2バイトでカウントする |
---|---|
mb_substr | 全角も半角も1文字でカウントする |
mb_strimwidth | 半角1文字、全角2文字でカウントする |
substr
は文字化けしますしmb_substr
は全然揃わないですし、mb_strimwidth
が比較的整います。
投稿のタイトルを関数化
タイトルはコンテンツ部やサイドバーにも使われるので関数にして引数で、文字数を指定します。コンテンツ部よりもサイドバーは文字数を削りたいなんて場合もありますので!functions.phpに以下を記述。
function titlimit($num){ $numc = $num*2; $gettit = strip_tags(get_the_title($post_id)); if ($numc < strlen($gettit)){ echo mb_strimwidth($gettit,0,$numc,'...','UTF-8'); }else{ echo $gettit; } }
出力時に引数で文字数を指定。30文字で指定。
<?php titlimit('30'); ?>
本文の文字数制限を関数化
本文も同じく引数で文字数を指定します。
function contlimit($num){ $numc = $num*2; $getcont = strip_tags(get_the_content($post_id)); if ($numc < strlen($getcont)){ echo mb_strimwidth($getcont,0,$numc,'...','UTF-8'); }else{ echo $getcont; } }
50文字で出力
<?php contlimit('50'); ?>
ついでにカスタムフィールド
ついでにカスタムフィールドの値にも文字数制限をかけたバージョンも紹介します。
function leadlimit($num){ global $post; $numc = $num*2; $getlead = strip_tags(get_post_meta( $post->ID, 'フィールド名', true )); if ($numc < strlen($getlead)){ echo mb_strimwidth($getlead,0,$numc,'...','UTF-8'); }else{ echo $getlead; } }
50文字で出力
<?php leadlimit('50'); ?>
ばっちり揃うように指定するにはフォントにも条件があったりするそうですが、この振り幅なら大丈夫な気がします。