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 | Введено. |
Де викликається хук
Де використовується хук у WordPress
add_action( 'after_switch_theme', '_wp_menus_changed');
add_action( 'after_switch_theme', '_wp_sidebars_changed');