check_theme_switched() は、テーマが切り替えられた直後に1度だけ呼び出されるコールバック関数で、テーマ変更時に一時的に記録されたフラグ(theme_switched オプション)を確認・削除します。
この関数は after_setup_theme フックなどの早い段階で実行し、必要であればテーマ切り替え時の初期化処理を行う目的で使われます。
基本構文
check_theme_switched();- 引数なしで実行。
- 内部的に
get_option( 'theme_switched' )を使って前回のテーマ切り替え情報が存在するかを確認。 - 存在すれば
do_action( 'after_switch_theme', $old_theme )を実行し、記録を削除します。
引き数と戻り値
| 引き数名 | 型 | 説明 |
|---|---|---|
| なし | なし | 引数は不要です。 |
| 戻り値名 | 型 | 説明 |
|---|---|---|
| なし | void | 戻り値はありません。テーマが切り替わっていれば after_switch_theme フックが実行されます。 |
ただし、内部的に do_action() を呼び出しているため、該当するアクションがあれば副作用が生じます。
使用例
タグを使った使用例
add_action( 'after_setup_theme', function() {
check_theme_switched();
} );
add_action( 'after_switch_theme', function( $old_theme ) {
error_log( 'テーマが変更されました。以前のテーマ: ' . $old_theme );
} );after_setup_theme で check_theme_switched() を呼ぶことで、テーマ切り替え直後の検出が可能になります。検出後に after_switch_theme アクションが発火し、旧テーマ名をログ出力しています。
注意点
check_theme_switched()は WordPress によって自動的にコアで呼ばれることがあるため、明示的に呼ぶ必要があるか確認してください。after_setup_themeよりも遅いフックで呼び出しても意味がありません。- 一度呼び出されると
theme_switchedオプションは削除されるため、二度目以降は発火しません。
よく一緒に使われる関数
after_switch_theme(アクションフック)
add_action( 'after_switch_theme', function( $old_theme ) {
// テーマ切り替え時の初期化処理
} );テーマ変更後に処理をフックするためのアクション。check_theme_switched() 内部から発火されます。
get_option()
$switched = get_option( 'theme_switched' );テーマ切り替え時にセットされる theme_switched オプションを取得。切り替え検知の判断材料となります。
switch_theme()
switch_theme( 'twentytwentyfour' );テーマを切り替える関数。これにより theme_switched フラグがセットされ、次回の読み込み時に check_theme_switched() で検出可能になります。
想定されるトラブル
after_switch_theme が発火しない
check_theme_switched() を早期に呼び出していないと、after_switch_theme は発火しません。
解決方法
after_setup_theme など早い段階で check_theme_switched() を確実に呼び出す。
切り替えが検出できない
theme_switched オプションが既に削除されていた、またはキャッシュが影響している可能性があります。
解決方法
テーマ切り替え後すぐにページをリロードする必要があります。キャッシュやリダイレクト処理に注意。
Q&A
まとめ
check_theme_switched() は、テーマが切り替えられた直後であることを検知し、必要に応じて after_switch_theme アクションを発火させる重要な関数です。
WordPress内部で自動的に呼び出されるため、通常は明示的に記述する必要はありませんが、テーマやプラグイン開発でカスタム処理を行いたい場合は、after_setup_theme での使用が推奨されます。テーマ初期化や切り替え後処理を安全に制御したいときに役立つ関数です。
コメント