cocoonフック調査~cocoon_settings_before_save、cocoon_settings_after_saveの使い方と活用例

タナビーの高梨です。
WordPressのテーマ「Cocoon」には、テーマ改変なしでデザインや動作を拡張できる豊富なアクション・フィルターフックが用意されています。
分かる範囲で内容を調査したのでブログにまとめていこうと思います。
今回はcocoon設定の保存時前後に発火するアクションフック
cocoon_settings_before_saveとcocoon_settings_after_save
です。
フックの概要
フック名 | 発火タイミング |
---|---|
cocoon_settings_before_save | Cocoon設定の保存前 |
cocoon_settings_after_save | Cocoon設定の保存後 |
表示に関わる場所ではなく、内部処理・裏方的な用途で使うのが基本ですと思われます
使いどころ
cocoon設定で保存ボタンを押した後のデータ保存前とデータ保存後にそれぞれ発火するアクションフックです。
何かを表示させるような箇所ではなさそうなので内部的な動作を行うのに使う気がしますが、あまり思いつきません。
変数がないので、参照できる値もグローバルに限られます。
before:
・skinを作った際にCSS当てるとか??
・$_POSTデータのバリデーションチェック??
・ログ出力??
・保存されたことをメール通知??
・$_THEME_OPTIONSを横取りして保存データを書き換え?
after:
・スキンを作った際にCSS当てるとか??
・ログ出力
・保存されたことをメール通知
do_action呼び出し元のソースコード
/lib/page-settings/_top-page.php
if( $is_post_ok ):
//var_dump($_POST[OP_RESET_ALL_SETTINGS]);
do_action('cocoon_settings_before_save');
///////////////////////////////////////
// 設定の保存
///////////////////////////////////////
//リセット
require_once abspath(__FILE__).'reset-posts.php';
//全体
require_once abspath(__FILE__).'all-posts.php';
~~省略~~
///////////////////////////////////////
// エディター用のカスタマイズCSS出力
///////////////////////////////////////
put_theme_css_cache_file();
///////////////////////////////////////
// ads.txtの出力
///////////////////////////////////////
put_ads_txt_file();
do_action('cocoon_settings_after_save');
endif;
引数
なし
カスタマイズコード例
function customize_cocoon_settings_before_save() {
global $_THEME_OPTIONS;
$_THEME_OPTION = array( 'site_key_color' => '#ffffff' );
}
add_action('cocoon_settings_before_save', 'customize_cocoon_settings_before_save' );
保存前にテーマオプションを変更する例です。
⚠️ あまり強引に上書きすると意図しない動作を引き起こす可能性があるため、十分にテストしましょう。
注意点
⚠️ どちらのフックも引数はありません。$_POST や $_THEME_OPTIONS などのグローバル変数を使って処理します
🚨 表示系の処理には不向きです。データ処理・ログ・通知系の裏方作業専用と考えるのが無難です
🧪 設定の保存処理に影響を与える可能性があるため、操作内容には十分な検証が必要です
まとめ
cocoon_settings_before_save と cocoon_settings_after_save は、Cocoon設定の保存処理の前後で処理を挟みたいときに使えるアクションフックです。
通知・ログ・バリデーション・初期値設定など、管理者向けのカスタマイズには重宝しそうです。
Cocoonを深く使いこなしたい場合に覚えておきたい裏方系フックです。