У меня есть код внутри functions.php, который предназначен для выполнения только при первой активации темы:
if ( is_admin() && isset($_GET['activated'] ) && $pagenow == 'themes.php' ) {
//this code only runs when the theme is first activated
}
Однако я почти уверен, что этот код не работает, если тема активирована вне обычного процесса активации. Например, если оператор switch_theme() вызывается из плагина.
В таком случае, как я могу изменить свой код выше, чтобы он выполнялся на switch_theme()?
if ( is_admin() && isset($_GET['activated'] ) && $pagenow == 'themes.php') OR (switch_theme_called() ) ) {
//this code only runs when the theme is first activated
}
Что ж, вместо использования параметра $_GET вы можете сохранить состояние инициализации в своей таблице параметров.
Например
К сожалению, хук «register_activation» доступен только для плагинов -> http://core.trac.wordpress.org/ticket/13602.
если тема инициализируется из плагина, не будет ли $pagenow = ‘themes.php’ всегда ложным?
Ты прав. Вы можете просто удалить все в операторе if и проверить только переменную $initialized. Это должно сработать. При первом вызове functions.php переменной присваивается значение true.
+1 Пока отлично. Могу ли я использовать if(!$initialized && is_admin()) вместо if(false===$initialized)?
С помощью if(false === $var) вы также проверяете, является ли тип переменной логическим. Если вместо этого вы используете if($var), оператор if также может быть истинным, если отправлено числовое значение 1 или строка ‘true’. Но да, скрипт будет работать с вашими настройками.