Cocoonがテンプレート読み込みフックを追加したのは記憶に新しいところです。
今まで子テーマにテンプレートをコピーして行っていたカスタマイズは、新しいフックを使うことで、スマートに実現できます。
Cocoonの設定値を特定のテンプレート読み込み時のみ、別の値に変更したい
テンプレートを読み込む直前に、Cocoonの設定値を書き換え、テンプレート読み込み後に設定値を元に戻します。
これを実現するには、Cocoon設定値の読み出しをフックして、特定の条件の時だけ別の値を返す必要があります。
フックにより特定の条件の時だけ別の値を返す方法は2つ考えられます。
- callback関数内で条件判定する
- フックを特定の条件のみ有効にする
callback関数の引数に必要な情報が無い場合はcallback関数内での条件判定は簡単にはできません。
フックそのもの特定の条件のみ有効化するには、特定の処理の前にadd_filterし、処理後にremove_filterすれば行けそうです。

しかし、そうは問屋が卸しません。
Cocoonの特定のテンプレート読み込み時のみCocoon設定値を変更する
CocoonにはPVをカウントする機能があり、tmp/css-custom.phpを読み込んだ際、Cocoon設定でPVカウントが有効化されている場合のみPVカウントが有効化されます。
tmp/css-custom.phpを読み込むときだけ、PVカウント機能を無効化して、それ以外の時にはPVカウント機能を有効化するようなカスタマイズの例です。
add_action("cocoon_part_before__tmp/css-custom",function(){
add_filter( 'theme_mod_access_count_enable', 'wpdocs_display_title_and_tagline',11,1);
});
function wpdocs_display_title_and_tagline($current_mod) {
remove_filter( 'theme_mod_access_count_enable', 'wpdocs_display_title_and_tagline' ,11);
return false;
}
add_filterとremove_filterを組み合わせる時の注意点
add_filterしたものを、特定の処理の後でremove_filterしても期待した動きになりませんでした。
add_filter('xxxx','func_xxx');
filterを通る処理
remove_filter('xxxx','func_xxx');
この書き方だと、add_filterがすぐに取り消されて有効になりません。
add_filterで呼ぶcallback関数内部でremove_filterすればうまくいきます。
add_filter('xxxx','func_xxx');
filterを通る処理
function func_xxx(){
remove_filter('xxxx','func_xxx');
}
callback関数内部で自分をremove_filterすれば、add_filterを適用する範囲を限定できます。
まとめ
add_filterとremove_filterを組み合わせることで、add_filterの適用範囲を限定できます。しかし、そのまま並べて書くとadd_filterが有効にならないため、callback関数の中でremove_filterする必要があります。