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_sidebars_changed');