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


