PHPの変数にHTMLを入れたい。入れたくない?
PHPの構文内でHTMLを出力するときにはphpの閉じタグ ?>
と開始タグ <?php
の間でHTMLを書けば良い。
<?php
$array = ['あ~', 'いいっすね~'];
foreach ($array as $value) {
?>
<p><?php echo $value; ?></p>
<?php
}
結果
<p>あ~</p><p>いいっすね~</p>
出力したい場所にPHPコードの埋め込みができるなら問題ないが、
ワードプレスのフィルターフックで本文(the_content)にHTMLを追加したい場合など、HTMLの出力を変数に格納するにはどうすればいいのか分からなかった。
文字列としてHTMLをくっ付けるでもいいんだけれど、追加したいHTMLが複雑になると文字列だとキツくなってくる。
<?php
add_filter('the_content', function ($content) {
$array = ['あ~', 'いいっすね~'];
$additional = '';
foreach ($array as $value) {
$additional .= '<p>'.$value.'</p>';
}
return $content .$additional;
});
こういうときにはOutput bufferingを使って解決できるらしい。
<?php
add_filter('the_content', function ($content) {
$array = ['あ~', 'いいっすね~'];
ob_start(); //出力のバッファを開始する
foreach ($array as $value) {
//ここからHTML
?>
<p><?php echo $value; ?></p>
<?php
//HTMLここまで
}
$additional = ob_get_contents(); //バッファされた出力を取得する
ob_end_clean(); //バッファを削除する
return $content .$additional;
});
ob_start()
と ob_get_contents()
の間で別のPHPファイルを include
し、その出力をバッファして変数に格納することもできるので便利。