blog

program

もう悩まない! WordPressのタイトルと本文の文字数制限を使いこなす

TOPページで新着記事を読み込む時。
ブログの記事一覧ページなどで本文を〇文字だけ表示させる時。
みなさんどのように実装されていますか?

the_excerpt()」を使う手もあるんですが、
こちらはこちらで色々と自動でタグが入ってしまったり、functions.phpに細々書く必要があったりとメンドクサイ個人的に使いにくいのであまり使いません。

今回は、the_title()the_contnet()の文字数制限について、細かめにご説明したいと思います。

01. タイトルの文字数制限

基本的にタイトルにはテキストしか入らないので、そんなに難しくありません。
ご紹介するコードも3つだけ。

① 単純に20文字で制限する

<?php echo mb_substr($post->post_title, 0, 20); ?>

単純ですね。20文字まで表示させているだけです。
ただこれだとタイトルの内容によっては、ブツッと切れた感じになってしまうかもしれません。

② 20文字で制限して後ろに「……」を付ける

<?php echo mb_substr($post->post_title, 0, 20).'……'; ?>

後ろに省略記号を付け、省略されていることを明示しています。
ブツ切れ感は軽減できましたが、今度は20文字未満のタイトルでも省略記号が付いてしまいます。

③ 20文字で制限し、それを超えた場合は「……」を付ける

<?php
if(mb_strlen($post->post_title, 'UTF-8')>20){
	$title= mb_substr($post->post_title, 0, 20, 'UTF-8');
	echo $title.'……';
}else{
	echo $post->post_title;
}
?>

文字数制限の前に文字数をカウントし、20文字以上と未満で条件分岐させました。
これで安心ですね。何文字で制限するかの設定を変えれば、どんな場合でも使えると思います。
※コピペされる場合は、制限文字数の『20』が2か所あるので気を付けてくださいね。

02.本文の文字数制限

さて、ヤッカイなのがこちら。
まずはタイトルと同じようにしてみましょう。

① 200文字で制限し、それを超えた場合は「……」を付ける

<?php
if(mb_strlen($post->post_content, 'UTF-8')>200){
	$content= mb_substr($post->post_content, 0, 200, 'UTF-8');
	echo $content.'……';
}else{
	echo $post->post_content;
}
?>

うまくいきそうに思いますが……?
試していただけると分かりますが、ほぼ間違いなく、レイアウトが崩れます。それはもう豪快に。

本文にはhtmlタグが入っているからです。
なのでまずは、本文中のhtmlタグを外す方法を試してみましょう。

②-1 htmlタグを外して文字数制限

<?php
if(mb_strlen($post->post_content, 'UTF-8')>200){
	$content= mb_substr(strip_tags($post->post_content), 0, 200, 'UTF-8');
	echo $content.'……';
}else{
	echo strip_tags($post->post_content);
}
?>

2行目の「strip_tags」で、$post->post_contentの中からhtmlタグを除外しています。
これでレイアウトは崩れなくなりました!
が、よく見てください。ところどころ、半角スペースが入っていませんか?

②-2 htmlタグを外して文字数制限し、改行コードを削除

半角スペースの正体は「改行コード」です。
ソース内で改行されていた場合に、HTMLタグだけが削除されたために改行コードだけが残り、ブラウザ上で半角スペースとして表示されてしまっているのです。
なので、この改行コードを「str_replace」で取ってしまいましょう。

<?php
if(mb_strlen($post->post_content,'UTF-8')>200){
	$content= str_replace('\n', '', mb_substr(strip_tags($post-> post_content), 0, 200,'UTF-8'));
	echo $content.'……';
}else{
	echo str_replace('\n', '', strip_tags($post->post_content));
}
?>

これで半角スペースも削除できました!キモチイイですね~笑

③ 特定のhtmlタグだけ残して文字数制限

さて、もうひとつ考えるべきパターンとして、特定のタグだけ残してほしいと要望があった場合が考えられます。
改行だけ残してほしいとか、投稿時に設定した文字色はそのまま表示したいとかですね。
その場合は「strip_tags」に引数を渡して、特定のタグを除外対象から外すことができます。

<?php
//brだけ残す
if(mb_strlen($post->post_content, 'UTF-8')>200){
	$content= mb_substr(strip_tags($post->post_content, '<br>'), 0, 200, 'UTF-8');
	echo $content.'……';
}else{
	echo strip_tags($post->post_content, '<br>');
}
//brとspanを残す
if(mb_strlen($post->post_content, 'UTF-8')>200){
	$content= mb_substr(strip_tags($post->post_content, '<br><span>'), 0, 200, 'UTF-8');
	echo $content.'……';
}else{
	echo strip_tags($post->post_content, '<br><span>');
}
?>

この方法を覚えておけば、もう本文の表示方法は思いのままですね!
テンプレートタグとPHP関数を駆使して、みなさんも良いWordpressライフを送ってください! エンジニアのBayashiでした。