3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-05-14

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

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?