PHPでのバッファリング
ob_start(),ob_clean()という関数があります。
長いPHPコードを一時的に変数に格納するような使い方ができます。
例えば、template-partsとして作成したsectionの雛形(section,__inner,__title,__contentなど)に、__contentの中身を読み込ませて、一つのsectionを完成させたいとします。
template-partsに渡せるデータにはルールがあり、具体的なコードや配列は渡せますが、phpファイル自体を渡すことはできません。
なので、例えばNewsセクションを作りたい場合、そのコンテンツを構成するコードを全てtemplate-partsファイルの引数として渡す必要があります。
しかし、この時にバッファリングを行うと、別途作成したnews.phpの内容を変数に格納してtemplate-partsファイルにわたすことができます。
以下、参考例です。
// news.php
<article class="p-news-item">
<p>newsです</p>
</article>
// front-page.php
$section_args = [
'section_name' => 'news',
'title' => 'お知らせ',
];
ob_start();
get_template_part('template-parts/sections/news');
$content = ob_get_clean();
get_template_part('template-parts/section', null, array_merge($section_args, array('content' => $content)));
あとは、sectionのtemplate-parts側で以下のように読み込めば、かなりスッキリします。
<?php echo isset($args['content']) ? $args['content'] : ''; ?>
$section_argsに「タイトルのアンダーバーの有無」や、「背景画像の有無」なども設定できるようにすると、どういうレイアウトなのか把握しやすくなったり、保守しやすくなるためオススメです。
長いコードを書いたり平行して別サイトの制作をしていると、今制作しているサイトの構成を思い出すのに時間がかかる場合があります。
テンプレート化することは、効率が上がったり楽になるということも大切ですが、何より間違いが無くなることや、修正が必要になった際の対応が楽になることが大切だと思います。
こういう機能を使うことで、制作者様、クライアント様、どちらにとっても良い効果になると思い記事化しました。
参考にした記事