sato-fujiiro.com

【wordpress】本文から文字数を制限した一部を抜粋する

久々にやることになったので忘備録です。

記事一覧にタイトルだけでは物足りないので、本文から抜粋することにしました

今回は自分が使うものではなく、比較的wordpressに慣れていない人に使ってもらうように制作しているサイトだったので、デフォルトで使える抜粋機能は使わず、本文をそのまま使用し、文字数上限を設定するようにしました。

やり方

1.本文のプレーンテキストを取得

本文をget_the_contentで取得します。

$content = get_the_content();
echo $content;

投稿のコンテンツ(本文)を取得します。このタグで出力するとショートコードやHTMLタグなども一緒に出力されてしまうのでwp_strip_all_tagsstrip_shortcodesでこれらを削除します。

$content = get_the_content();
$content = wp_strip_all_tags($content);
$content = strip_shortcodes($content);
echo $content;

2.文字数の上限を設定

文字数の上限の指定ははPHP関数mb_substrを使用します。

mb_substr( 切り出したい文字列 , 開始位置 , 終了位置 , エンコーディング);
・指定する数字はバイト数
・「終了位置」を省略した場合は全文
・「エンコーディング」を省略した場合は内部文字エンコーディングを使用

$content = get_the_content();
$content = wp_strip_all_tags($content);
$content = strip_shortcodes($content);
$content = mb_substr($content, 0, 100, 'UTF-8');
echo $content;

これで本文をプレーンテキストで出力し、上限を設定することができます。

文字が上限以上あるとき「…」をつけるには

$count = strlen($content); //文字数を数える
if($count >= 50){
    echo "…";
}

省略した時にバッサリ切れるのではなく「…」がついている方が親切な気がすると思いまして、

最終的に出力した文字列を使用し、strlenで文字数を数えてからその結果に応じて「…」を表示します。

文字は英数1バイト、カナ3バイトとブレがあるため絶対での指定は難しいようだったので今回は50バイト以上の場合に「…」を表示するように指定しました。

という感じで、本文に入力した文字列を自動的に省略することができました。

しかし、なんだかんだでよく使うのですが、よく使うものほど何故か毎回あんまり覚えていないのはなんででしょうかね…

スポンサーリンク

最終更新:2020.11.20

この記事をシェアする