はじめに
Cocoonには、WebページのHTMLがブラウザに出力される直前に、出力全体を取得して内容を加工できるフィルターフックが用意されています。
apply_filters('code_minify_call_back', string $content);
Cocoon 2.6.8でテンプレートフックがサポートされる以前は、このフィルターフックを利用して、要素の追加などのカスタマイズが行われていました。
同様の仕組みを、他のテーマでも実現できるようにします。
この記事では、この方法について説明します。
使用方法
以下にフックを示します。
apply_filters('final_html_output_filter', string $content);
実装手順
以下のコードをfunctions.phpに追加します。
add_action('after_setup_theme', function () {
add_action('init', function () {
ob_start();
});
// PHPの実行が終了する直前に実行
add_action('shutdown', function () {
$content = '';
// 現在のバッファネスト数を取得
$levels = ob_get_level();
// 全てのバッファから出力を取り出し連結
for ($i = 0; $i < $levels; $i++) {
$content .= ob_get_clean();
}
// 最終出力フィルター
echo apply_filters('final_html_output_filter', $content);
}, 0);
});
さいごに
今回紹介した方法を使えば、Cocoon以外のテーマでも、HTMLの最終出力に対して柔軟に加工や置換を行えるようになります。
テンプレートを直接編集せずに済むため、テーマのアップデートにも強く、保守性の高いカスタマイズが可能です。
特定の要素の追加や削除、HTMLの最適化など、幅広い用途に活用できるため、サイト全体の出力制御を行いたい方はぜひ取り入れてみてください。

