WordPressで投稿コンテンツなどを出力するとき、「HTMLタグを無くして文字だけを取得したい」といったことがあるかと思います。
そんなテキストだけを出力する必要がある時に使える、PHPの strip_tags() の使い方メモです。PHPの関数なので、WordPress以外でも利用できます。
strip_tags() 関数は、指定した文字列の中にあるHTMLのタグやPHPタグを削除します。
strip_tags($str, $allowed_tags = null)$str … 消したいHTMLタグがある文字列を指定。$allowed_tags … 取り除きたくないHTMLタグを指定。返り値は、$str で指定した文字列から $allowed_tags で指定した以外のHTMLタグを取り除いた文字列です。
全てのHTMLタグを削除するなら $str の部分だけ記述します。
$str = '<a href="https://komaricote.com">strip_tags()でHTMLタグ削除</a>';
$deleteStr = strip_tags($str);
echo $deleteStr;上記コードで出力した場合、HTMLのaタグが削除され、リンクなしの「strip_tags()でHTMLタグ削除」というテキストのみ表示されます。
PHPタグやHTMLコメントがある場合も削除されます。
$str = '<p>テキスト<!-- コメントアウト --><?php ?><?= ?></p>';
$deleteStr = strip_tags($str);
echo $deleteStr;この場合、pタグのほか <!-- コメントアウト --> や <?php ?><?= ?> の部分も削除されます。
特定のタグのみ除外したい場合は「削除しないHTMLタグ」を指定します。以下のコードでは、aタグはそのまま残ります。
$str = '<p><a href="https://komaricote.com">strip_tags()で特定のHTMLタグ削除</a><p>';
$deletePtag = strip_tags($str, '<a>');【HTMLの表示】
<a href="https://komaricote.com">strip_tags()で特定のHTMLタグ削除</a>
複数のタグを除外したい場合は、タグをつなげて記述します。以下の場合はh3タグのみが削除されます。
$str02 = '<h3><p><a href="https://komaricote.com">strip_tags()で特定のHTMLタグ削除</a></p></h3>';
$deleteH3tag = strip_tags($str02, '<p><a>');【HTMLの表示】
<p><a href="https://komaricote.com">strip_tags()で特定のHTMLタグ削除</a></p>
【その他注意事項】
※HTMLコメントやPHPタグは除外することができません。(削除される)
※HTMLがちゃんと記述されているか、と言ったチェックは行わないため、タグが誤ったものだと削除対象から外れてしまいます。
うまく取り除くことができなかったり必要な部分まで除外されてしまう場合は、元のタグが正しく記述されているか確認してみましょう。
HTMLタグを「除外」ではなく「無効」にしたい場合は、htmlspecialchars() 関数を使います。
こちらの関数は <p></p> などのHTMLタグの文字列を、<p>、<p> といった特殊文字に変換するためのコードです。
WordPressのテンプレートタグの中には、そのまま出力すると文字列にHTMLが含まれるものもあります。そのようなコードを使用してHTMLタグを削除したい場合にも、strip_tags が使えます。
例えば、投稿の本文をHTMLタグを除いて出力させる場合、以下のように記述します。
$strip_cont = strip_tags(get_the_content());
echo $strip_cont;出力まで行う the_〇〇 ではなく、取得のみを行う get_〇〇 を指定します。the_〇〇 というテンプレートタグは出力することがデフォルトの設定で、その場合値が取得できません。そのためHTMLタグが除外されないものが出力されます。
そのため、ここでは get_the_content() を使用しています。
strip_tags を使用すること自体もちろん問題はありませんが、WordPressテンプレートタグの中には、あらかじめタグを削除してから出力するテンプレートタグもあります。
例えば、タイトルのHTMLタグを除外する場合は the_title_attribute() というテンプレートタグが便利です。このコードだけで、HTMLタグを削除してテキストのみ出力してくれます。
関連記事
the_title_attribute() – タイトルをサニタイズして取得・表示
さらに文字数の制限もしたい、という場合はこちらの記事もご参考ください。
PHPの関数を使って文字数を制限
タイトルにHTMLタグをつけられるの?と思った方はこちらの記事もどうぞ。
【WordPress】タイトルや文章の改行方法まとめ