テーマカスタマイズ

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'); ?>

ばっちり揃うように指定するにはフォントにも条件があったりするそうですが、この振り幅なら大丈夫な気がします。

WEBSITE DESIGN REQUEST

ホームページ制作依頼について

W・D・Sでホームページ制作をご希望の方はお気軽にご相談ください。
制作内容、ご予算、納期をお知らせいただくとスムーズです。

ホームページ制作を相談する