2022.03.08
wordpressには記事の抜粋テキストを任意に設定できるようになっています。出力の際にはget_the_excerpt()関数又はthe_excerpt()で出力できるが、内部で改行を行うことが出来ない。
別途「抜粋」欄に、brタグを直接入力すれば機能するが、通常はそういったことも面倒くさいので、本文から、冒頭の○○文字を表示させる場合が多い。
しかし、get_the_excerpt()やthe_excerpt()では、HTMLタグが削除されてしまうため、300文字などにすつと抜粋部分が読みずらくなってしまいます。
そのため関数を制作して好みの抜粋分を出力できるようにしました。
//本文抜粋を取得する関数 function get_the_custom_excerpt($content, $length) { $length = ($length ? $length :500);//デフォルトの文字数 $content = strip_shortcodes($content);//ショートコード削除 $content = preg_replace('/.+/is',"",$content); //moreタグ以降削除 $content = strip_tags($content,"");//pタグ以外のタグの除去 $content = str_replace(" ","",$content);//特殊文字の削除(今回はスペースのみ) $content = mb_substr($content,0,$length);//文字列を指定した長さで切り取る return $content; }
");//pタグ以外のタグの除去 $content = str_replace(" ","",$content);//特殊文字の削除(今回はスペースのみ) $content = mb_substr($content,0,$length);//文字列を指定した長さで切り取る return $content; }
ポイントは6行目でPHPの[strip_tags]を使用し、Pタグを除く余分なHTMLタグを削除している点です。
この関数は、$contentの部分にWP関数のthe_content(); を代入し全文を読み込んだのちに、文字数制限などをして抜粋を表示させます。
しかし、the_content();について来る、HTMLタグにはdivタグなども、含まれていて、文字数制限の結果に、閉じタグが出力されない場合、表示崩れなどが起こる可能性があります。
そこで改行に必要なpタグを除いて削除させています。
pタグも閉じタグが出力されない場合があるのですが、pタグの場合表示崩れのリスクがかなり少ない。
<?php if(mb_strlen(get_the_content())>=300){ echo get_the_custom_excerpt( get_the_content(), 300).'・・・・・' ; } else { echo get_the_custom_excerpt( get_the_content(), 300); } ?>
出力は300文字とします。
300文字以上ある場合は、「・・・・・」を表示させたいので、phpの関数mb_strlenを利用し、文字数を判定させています。
参考サイト
WordPressで綺麗な本文抜粋を取得する方法(moreタグ対応、ショートコード、タグ、特殊文字削除)
#GA4 #WordPress #備忘録
#WordPress #独り言 #面白い話
#WordPress #コーディング #備忘録
X(Twitter)