お知らせなどの投稿を一覧で表示させるとき、タイトルとコンテンツの一部を枠に収め、リスト化表示するような形が一般的だと思います。

投稿では場合によってはタイトルも長くなってしまうことがあり、タイトル表示する場所が折り返してしまい、レイアウトがずれるということもあったりします。

それらを防ぐため、ある程度の文字制限を行い、制限超えた場合に「…」などを末尾に付けるという方法をよく見ます。

これをWPで行う際、以前PHPの関数を利用していたことがあったのですが、ちゃんとWP側で関数用意されていたことに今更気づいてしまいました。こんな便利なの今までなぜ使わなかったのかw

忘れないように記録しておきます。

 

例:タイトルを40文字制限し、超えた場合に「…」を末尾につける
<?php echo wp_trim_words( get_the_title(), 40, '…' ); ?>

 

例:コンテンツを70文字制限し、超えた場合に「…」を末尾につける
<?php echo wp_trim_words( get_the_content(), 70, '…' ); ?>

 

タイトルはこれでOKっぽいですが、コンテンツとなるとちょっと色々と面倒なことがあります。

投稿のリスト化したときに表示する文字数にばらつきが発生することがあります。

改行やスペースがある場合、それも1文字と認識するようで、これらを削除してから表示するという作業が必要になるっぽいです。

その場合、wp_trim_words()にかけるまでにPHP関数で改行とスペースを削除します。

 

<?php
// 改行\nをbrタグに変換し、brタグを削除する
$content = str_replace("<br>", "", nl2br(get_the_content(), FALSE));
// スペースを削除する
echo wp_trim_words( str_replace(" ", "", $content), 70, '…' );
?>

 

上記は全角スペースまで削除していないので、本来はそれも行う必要があると思うけど今回は割愛。

これである程度リスト化して文字制限してもばらつきは少なくなるはず!