最終HTML出力前にフィルター関数を追加する方法

Cocoonカスタマイズ集
この記事は約2分で読めます。
記事内に広告が含まれています。

WordPress 6.9でサポート

最終HTML出力直前に処理を行える標準フックwp_template_enhancement_output_bufferが標準でサポートされました。
そのため、Cocoon独自の最終HTML フィルター(code_minify_call_back)に依存せず、WordPress標準の仕組みで同等のカスタマイズが可能です。

はじめに

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の最適化など、幅広い用途に活用できるため、サイト全体の出力制御を行いたい方はぜひ取り入れてみてください。

タイトルとURLをコピーしました