[php]htmlタグ付き改行ありテキスト群から抜粋文取得

またピンポイントな話。

成り行き

道程を理解しないと活用シーンもわからんくなるので前置きを書く。

とあるWordpressで作成したWEBサイトをSEO施策するために、各ページのdescriptionを設置することになった。変な組み方をされていて、descriptionが変数指定になってて、しかも変数記入部位が存在しない。その上空欄だったらこれって感じのを設定してるもんだから、どのページに行っても同じdescriptionが表示される。

既に記事がいっぱい書かれているのでdescription用のカスタムフィールドを作るわけにもいかず、記事本文の最初から○文字を引っ張ってくるしかない感じ。

で、本部が記事の本文じゃなくてカスタムフィールド(テキストエリア)を使用している。しかもSmartCustomFieldsを使用してる、使い慣れてない、めんどい。加えてカスタムフィールドは繰り返し設定がついてた。使ってる飲みたことないけど。つらい。

やること

繰り返しとして設置されたカスタムフィールドから文字列を抜き出す。

文字列は\nによる改行とHTMLタグが混在しているので、改行とHTMLタグを削除して、先頭から○文字を切り出す。

やり方

<?php
$description = mb_substr(str_replace(PHP_EOL, '',strip_tags(get_post_meta(get_the_id(),'【name】', false)[0])),0,100);

とんでもないことになってる。整理する。

get_post_meta(get_the_id(),'***', false)[0]

なんでプラグイン側が用意した書式を使用しないのか理解ができないけど、get_post_meta()でカスタムフィールドを引っ張ってこれる。

https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_post_meta

最後の「[0]」は繰り返し対策。つけなかったら表示されないかバグる。1回目の内容だけ取得すればいいから0を指定してある。

strip_tags('***')

タグを排除する。

PHP: strip_tags - Manual
str_replace(PHP_EOL, '','***')

改行を削除する。<br>じゃなくて\nの方。descriptionなら関係ないしやらなくていいけど美しくないしついでだし、やる。

mb_substr('***',0,100);

指定した文字列の特定箇所から指定文字数を切り出す。これは「先頭から100文字を切り出す」って内容。

他人のWEBサイト

自分が作ったものが最高とは言わないけど、たまに何だこれってレベルでヤバい組み方をしてるサイトがある。いつの時代だよって感じのインデントとか、wpじゃなくてphpだろこれってやつとか。人それぞれの経歴が分かるものだし楽しいっちゃ楽しいんだけど、回りくどくないかこれってやつを見るのはしんどい。

どこで躓くか分からない地雷だったりするから、修正案件はちょっと多めに時間を見積もったほうがいい。

コメント

タイトルとURLをコピーしました