Хук switch_theme
в WordPress позволяет выполнять действия после деактивации текущей темы и перед активацией новой. Этот хук может быть полезен для очистки или удаления данных, связанных с деактивируемой темой. Например, с его помощью можно удалять опции, сбрасывать настройки, чистить кеши и выполнять другие действия, связанные с переходом на новую тему.
do_action( ‘switch_theme’, string $new_name, WP_Theme $new_theme, WP_Theme $old_theme )
Хук switch_theme
срабатывает после того, как тема была переключена, но перед следующим запросом. Он активируется для старой темы и предоставляет информацию как о новой, так и о старой темах. Таким образом, этот хук можно использовать, чтобы убрать или модифицировать элементы, которые связаны исключительно с текущей (деактивируемой) темой.
Параметры
$new_name
(строка): Имя новой темы.$new_theme
(объектWP_Theme
): Объект новой темы.$old_theme
(объектWP_Theme
): Объект деактивируемой (старой) темы.
Пример 1: Удаление пользовательских настроек при деактивации темы
Если в теме есть определенные настройки, которые сохраняются в базе данных, их можно удалить при деактивации темы.
function delete_theme_options_on_deactivation($new_name, $new_theme, $old_theme) {
delete_option('mytheme_custom_option');
delete_option('mytheme_another_option');
}
add_action('switch_theme', 'delete_theme_options_on_deactivation', 10, 3);
В этом примере удаляются две пользовательские опции темы при её деактивации.
Пример 2: Очистка переписанных правил после смены темы
Переписанные правила могут быть изменены, если тема добавляет пользовательские типы записей или таксономии. Очистка правил переписывания гарантирует, что они будут обновлены для новой темы.
function flush_rewrite_rules_on_theme_switch($new_name, $new_theme, $old_theme) {
flush_rewrite_rules(false);
}
add_action('switch_theme', 'flush_rewrite_rules_on_theme_switch', 10, 3);
Этот код очищает правила переписывания URL после деактивации темы, что полезно для обновления структуры ссылок в новой теме.
Пример 3: Удаление кастомных виджетов при деактивации темы
Некоторые темы регистрируют свои виджеты. С помощью данного примера можно очистить опции, связанные с этими виджетами, чтобы они не оставались в базе данных.
function remove_custom_widgets_on_theme_switch($new_name, $new_theme, $old_theme) {
unregister_widget('My_Custom_Widget_Class');
delete_option('widget_my_custom_widget');
}
add_action('switch_theme', 'remove_custom_widgets_on_theme_switch', 10, 3);
В этом примере деактивируется и удаляется виджет, зарегистрированный в старой теме.
Пример 4: Сброс настроек кастомайзера при деактивации темы
В теме можно сохранить настройки кастомайзера в базе данных, которые будут удалены при деактивации темы.
function reset_customizer_settings_on_theme_switch($new_name, $new_theme, $old_theme) {
remove_theme_mod('header_background_color');
remove_theme_mod('footer_text');
}
add_action('switch_theme', 'reset_customizer_settings_on_theme_switch', 10, 3);
Этот код удаляет параметры кастомайзера, такие как цвет фона заголовка и текст в подвале, которые использовались в старой теме.
Пример 5: Деактивация кастомного кода и функций при смене темы
Если в старой теме были подключены кастомные функции, такие как фильтры или действия, их можно удалить при деактивации.
function deactivate_custom_code_on_theme_switch($new_name, $new_theme, $old_theme) {
remove_filter('the_content', 'my_custom_content_filter');
remove_action('wp_footer', 'my_custom_footer_function');
}
add_action('switch_theme', 'deactivate_custom_code_on_theme_switch', 10, 3);
Этот пример удаляет фильтр, который модифицировал контент, и кастомную функцию, добавленную в подвал сайта.
Пример 6: Логирование информации о смене темы
Этот пример демонстрирует, как можно записывать информацию о смене темы для анализа и отслеживания.
function log_theme_switch($new_name, $new_theme, $old_theme) {
$message = sprintf(
"Theme switched from '%s' to '%s' on %s",
$old_theme->get('Name'),
$new_theme->get('Name'),
date('Y-m-d H:i:s')
);
error_log($message);
}
add_action('switch_theme', 'log_theme_switch', 10, 3);
Здесь в файл логов записывается сообщение о том, какая тема была деактивирована и какая активирована, вместе с текущей датой и временем.
Пример 7: Создание резервной копии настроек перед сменой темы
Этот пример демонстрирует создание резервной копии пользовательских настроек в базе данных перед деактивацией темы, чтобы при необходимости можно было их восстановить.
function backup_theme_settings_on_switch($new_name, $new_theme, $old_theme) {
$theme_options = get_option('mytheme_options');
if ($theme_options) {
update_option('mytheme_backup_options', $theme_options);
}
}
add_action('switch_theme', 'backup_theme_settings_on_switch', 10, 3);
Код создает резервную копию настроек в опции mytheme_backup_options
, которую можно восстановить, если потребуется вернуться к старой теме.
Заключение
Хук switch_theme
в WordPress позволяет разработчикам управлять процессом деактивации темы, предоставляя возможности для очистки настроек, удаления виджетов, сброса параметров и логирования. Этот хук активируется только для старой темы, и он полезен для выполнения действий, которые должны происходить только при деактивации темы, а не при активации новой.