WordPress как на ладони
Прибыльная монетизация. Выгодно. Безопасно. Стабильно. Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

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

Где вызывается хук

check_theme_switched()
after_switch_theme
wp-includes/theme.php 3395
do_action( 'after_switch_theme', $old_theme->get( 'Name' ), $old_theme );
wp-includes/theme.php 3398
do_action( 'after_switch_theme', $stylesheet, $old_theme );

Где используется хук в WordPress

wp-includes/default-filters.php 351
add_action( 'after_switch_theme', '_wp_menus_changed' );
wp-includes/default-filters.php 352
add_action( 'after_switch_theme', '_wp_sidebars_changed' );
wp-includes/theme.php 3376
remove_action( 'after_switch_theme', '_wp_menus_changed' );
wp-includes/theme.php 3377
remove_action( 'after_switch_theme', '_wp_sidebars_changed' );
3 комментария
    Войти