after_switch_theme
Срабатывает после того, как тема была переключена на новую - при активации темы.
Срабатывает при первой загрузке WP, после того как тема была переключена на новую и старая тема при этом существует. Если старой темы не существует, то хук сработает так:
// один параметр: $stylesheet, а не два: $old_name, $old_theme do_action( 'after_switch_theme', $stylesheet );
Во время этого события, доступны только функции новой активированной темы. Если нужны функции старой темы, используйте событие switch_theme.
Следует использовать для активации новой темы.
Отличается от события switch_theme
тем что срабатывает позже, а точнее, не в текущем исполняемом PHP скрипте, а в следующем - при следующей загрузке страницы (при активации темы происходит два редиректа и затем возврат на исходную страницу)...
Как это работает
Полная логика переключения темы:
-
Мы на странице: /wp-admin/themes.php.
-
Жмем кнопку (ссылку) «Активировать» тему.
-
Переходим по ссылке вида: /wp-admin/themes.php?action=activate&stylesheet=twentyfifteen.
-
Срабатывает хук
switch_theme
. -
Нас автоматом перекидывает на ссылку вида: /wp-admin/themes.php?activated=true.
-
Срабатывает хук
after_switch_theme
. - Теперь, нас автоматом перекидывает на исходную страницу: /wp-admin/themes.php
В результате, в последнем исполнении PHP скрипта, мы не видим как срабатывают оба хука переключения... Чтобы увидеть что там происходит, можно использовать обрыв с помощью die()...
Использование
add_action( 'after_switch_theme', 'wp_kama_after_switch_theme_action', 10, 2 ); /** * Function for `after_switch_theme` action-hook. * * @param string $old_name Old theme name. * @param WP_Theme $old_theme WP_Theme instance of the old theme. * * @return void */ function wp_kama_after_switch_theme_action( $old_name, $old_theme ){ // action... }
- $old_name(строка)
- Название старой темы.
- $old_theme(WP_Theme)
- Объект WP_Theme старой темы. См. wp_get_theme()
Примеры
#1 Добавим опции темы по умолчанию при её активации
add_action('after_switch_theme', 'mytheme_setup_options'); function mytheme_setup_options( $old_name ) { $opt = array('opt1'=>'val1', 'opt2'=>'val2'); add_option('mytheme_options', $opt ); }
#2 Другой вариант добавить опции темы при активации
Это такой же вариант как и в первом примере, только с использованием хука after_setup_theme
, который срабатывает постоянно, а не один раз. Но в этом примере он сработает один раз, за счет проверки @ $_GET['activated']
.
Рекомендую использовать первый вариант, потому что он создан для того, чтобы делать что-то один раз при переключении на новую тему. Также в нем доступны параметры старой темы...
add_action( 'after_setup_theme', 'activate_my_theme' ); function activate_my_theme() { if ( @ $_GET['activated'] === 'true' && current_user_can('manage_options') ){ $opt = array('opt1'=>'val1', 'opt2'=>'val2'); add_option('mytheme_options', $opt ); } }
#3 Удаление опций при деактивации темы и добавление при активации
// удаляем настройки темы при деактивации add_action('switch_theme', 'deactivate_my_theme'); function deactivate_my_theme( $old_name ){ // доступны функции старой темы, но не новой delete_option('mytheme_options'); } // добавляем настройки темы при активации add_action('after_switch_theme', 'activate_my_theme' ); function activate_my_theme( $new_name ){ // доступны функции новой темы, но не старой $opt = array('opt1'=>'val1', 'opt2'=>'val2'); add_option('mytheme_options', $opt ); }
Список изменений
С версии 3.3.0 | Введена. |
Где вызывается хук
do_action( 'after_switch_theme', $old_theme->get( 'Name' ), $old_theme );
do_action( 'after_switch_theme', $stylesheet, $old_theme );
Где используется хук в WordPress
add_action( 'after_switch_theme', '_wp_menus_changed' );
add_action( 'after_switch_theme', '_wp_sidebars_changed' );
remove_action( 'after_switch_theme', '_wp_menus_changed' );
remove_action( 'after_switch_theme', '_wp_sidebars_changed' );