PHP
迫真エンジニアリング部

HTMLをPHP変数に入れたいときにはOutput bufferingすると良いらしい

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 し、その出力をバッファして変数に格納することもできるので便利。

参考 : PHP: ob_start - Manual