after_switch_theme хук-подіяWP 3.3.0

Спрацьовує після того, як тему було переключено на нову – при активації теми.

Спрацьовує при першому завантаженні WP, після того, як тема була переключена на нову і стара тема при цьому існує. Якщо старої теми немає, то хук спрацює так:

// один параметр: $ stylesheet, а не два: $ old_name, $ old_theme
do_action( 'after_switch_theme', $ stylesheet );

Під час цієї події доступні лише функції нової активованої теми. Якщо потрібна функція старої теми, використовуйте подію switch_theme .

Слід використовувати для активації нової теми.

Відрізняється від події switch_themeтим, що спрацьовує пізніше, а точніше, не в поточному виконуваному PHP скрипті, а в наступному – при наступному завантаженні сторінки (при активації теми відбувається два редиректи і потім повернення на вихідну сторінку).

Як це працює

Повна логіка перемикання теми:

  1. Ми на сторінці: /wp-admin/themes.php .

  2. Тиснемо кнопку (посилання) «Активувати» тему.

  3. Переходимо за посиланням: /wp-admin/themes.php?action=activate&stylesheet=twentyfifteen .

  4. Спрацьовує хук switch_theme.

  5. Нас автоматично перекидає посилання виду: /wp-admin/themes.php?activated=true .

  6. Спрацьовує хук after_switch_theme.

  7. Тепер нас автоматично перекидає на вихідну сторінку: /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
()

Приклади

0

#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);
}
0

#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);
	}
}
0

#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Введено.

Де викликається хук

after_switch_theme

Де використовується хук у WordPress

wp-includes/default-filters.php 350

add_action( 'after_switch_theme', '_wp_menus_changed');

wp-includes/default-filters.php 351

add_action( 'after_switch_theme', '_wp_sidebars_changed');

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *