Arkhe風の神フックが新登場!機能追加でサイトを強化する方法

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

Cocoon 2.6.8でサポート。

はじめに

この記事では、Cocoon 2.6.8で追加された新しいテンプレート読み込み機能について説明します。

これにより、テンプレートのカスタマイズがより柔軟に行えるようになりました(表1参照)。

テンプレートフックについて
項目変更前(Cocoon 2.6.8以前)変更後(Cocoon 2.6.8以降)
テンプレートの読み込みget_template_part(‘$slug’)cocoon_template_part(‘$slug’)
フックの有無なしあり
カスタマイズ性低い(テンプレート読み込み前のみ処理可能)高い(読み込み前後の処理やテンプレートの書き換えが可能)

使用方法

追加されたフックの具体的な使い方とサンプルコードを紹介します。

テンプレートのパラメータを書き換え

add_filter('cocoon_part_args__{$slug}', function ($args) {
  // $argsの書き換え処理

  return $args;
});

テンプレートの読み込み前に処理を追加

add_action('cocoon_part_before__{$slug}', function ($name, $args) {
  // 出力処理
}, 10, 2);

テンプレートをき換え

add_filter('cocoon_part__{$slug}', function ($content, $name, $args) {
  // $contentの書き換え処理

  return $content;
}, 10, 3);

テンプレートの読み込み後に処理を追加

add_action('cocoon_part_after__{$slug}', function ($name, $args) {
  // 出力処理
}, 10, 2);

使用例

以下はテンプレートフォルダtmp内のfooter-javascript.phpを書き換える例です。

add_filter('cocoon_part__tmp/footer-javascript', function ($content) {
  $content = str_replace('spaceBetween: 4', 'spaceBetween: 30', $content);

  return $content;
});

参考:実装手順

直接、get_template_part()でテンプレートを展開せずに、独自のテンプレート読み込み関数を作成します。
関数内でget_template_part()を呼び出し、フィルターやアクションを適用できるようにします。

if (!function_exists('cocoon_template_part')):
function cocoon_template_part($slug, $name = null, $args = []) {

  // $args書き換え
  $args = apply_filters("cocoon_part_args__{$slug}", $args);
  if (!is_array($args)) {
    $args = [];
  }

  // 読み込み前発火
  do_action("cocoon_part_before__{$slug}", $name, $args);

  ob_start();
  get_template_part($slug, $name, $args);
  $content = ob_get_clean();

  // 書き換え
  $content = apply_filters("cocoon_part__{$slug}", $content, $name, $args);
  echo (string) $content;

  // 読み込み後発火
  do_action("cocoon_part_after__{$slug}", $name, $args);
}
endif;

さいごに

フックを活用することで、テンプレートの内容を柔軟に変更できるようになり、特定のタイミングで処理を追加したり、テンプレート全体を簡単にカスタマイズできます。
これにより、大幅なコード変更を行わずに効率的な調整や機能追加が可能となり、サイトのニーズに合わせた柔軟な対応が実現します。

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