Хук активации темы WordPress
Я хочу написать функцию для отправки мне на email URL сайта при активации моей темы.
Какой хук срабатывает при активации темы?

Я написал код, который обеспечивает надежные хуки активации/деактивации темы. Пожалуйста, ознакомьтесь и поделитесь вашим мнением!
http://www.krishnakantsharma.com/2011/01/activationdeactivation-hook-for-wordpress-theme/

@Krisha Kant Sharma: Этот код выглядит многообещающе, но не могли бы вы скопировать его в свой ответ? Тогда он останется доступным, даже если ваш блог изменит местоположение или по какой-то причине станет недоступен.

Вот код, просто назовите файл theme_activation_hook.php, как на сайте, и скопируйте это.
<?php
/**
* Предоставляет хуки активации/деактивации для темы WordPress.
*
* @author Krishna Kant Sharma (http://www.krishnakantsharma.com)
*
* Использование:
* ----------------------------------------------
* Включите этот файл в код вашей темы.
* ----------------------------------------------
* function my_theme_activate() {
* // код, выполняемый при активации темы
* }
* wp_register_theme_activation_hook('mytheme', 'my_theme_activate');
*
* function my_theme_deactivate() {
* // код, выполняемый при деактивации темы
* }
* wp_register_theme_deactivation_hook('mytheme', 'my_theme_deactivate');
* ----------------------------------------------
*
*
*/
/**
*
* @desc Регистрирует хук активации темы
* @param string $code : Код темы. Это может быть базовая папка вашей темы. Например, если ваша тема находится в папке 'mytheme', то код будет 'mytheme'
* @param callback $function : Функция, вызываемая при активации темы.
*/
function wp_register_theme_activation_hook($code, $function) {
$optionKey="theme_is_activated_" . $code;
if(!get_option($optionKey)) {
call_user_func($function);
update_option($optionKey , 1);
}
}
/**
* @desc Регистрирует хук деактивации
* @param string $code : Код темы. Должен совпадать со значением, указанным в функции wp_register_theme_activation_hook как $code
* @param callback $function : Функция, вызываемая при деактивации темы.
*/
function wp_register_theme_deactivation_hook($code, $function) {
// сохраняем функцию в глобальной переменной, специфичной для кода
$GLOBALS["wp_register_theme_deactivation_hook_function" . $code]=$function;
// создаем функцию времени выполнения, которая удалит опцию, установленную при активации темы, и вызовет функцию деактивации из $function
$fn=create_function('$theme', ' call_user_func($GLOBALS["wp_register_theme_deactivation_hook_function' . $code . '"]); delete_option("theme_is_activated_' . $code. '");');
// добавляем созданную выше функцию к хуку switch_theme. Этот хук вызывается, когда администратор меняет тему.
// Из-за реализации ядра WordPress этот хук может быть получен только текущей активной темой (которая будет деактивирована, так как администратор выбрал другую.
// Ваша тема может воспринимать этот хук как хук деактивации.
add_action("switch_theme", $fn);
}

Для этого нет специализированного хука. Я видел несколько подходов:
- Хук
switch_theme
с проверкой вашей темы - Выполнение "Настроечного" кода только при активации? - Определение админ-страницы после активации темы - Установка настроек при активации Тем
Хочу отметить, что отправка себе любой информации без согласия пользователя (а запуск чего-либо при активации не дает возможности запросить такое согласие) может рассматриваться как некорректное поведение.

WordPress теперь предоставляет этот хук под названием after_switch_theme
. Вы можете использовать его следующим образом:
add_action('after_switch_theme', 'my_theme_activation');
function my_theme_activation () {
// ВЫПОЛНЯЕМ ВСЕ НЕОБХОДИМЫЕ ДЕЙСТВИЯ
}
Вы также можете использовать хук switch_theme
для выполнения кода при деактивации темы.
Источник: http://codex.wordpress.org/Plugin_API/Action_Reference/after_switch_theme

Поместите этот код в начало вашего файла functions.php
<?php if ( is_admin() && isset($_GET['activated'] ) && $pagenow == "themes.php" ) {
// выполните ваши действия
$url = get_site_url();
// Сообщение
$message = "Новая тема WordPress активирована на $url ";
// Если какая-либо строка превышает 70 символов, используем wordwrap()
$message = wordwrap($message, 70, "\r\n");
// Отправка
wp_mail('mail@yourdomain.com', 'Тема активирована', $message);
}
?>
Замените mail@yourdomain.com
на ваш собственный email адрес.
Надеюсь, это поможет.
