Хук активации темы WordPress

3 янв. 2011 г., 10:14:35
Просмотры: 14.6K
Голосов: 14

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

Какой хук срабатывает при активации темы?

3
Комментарии

Использование хука активации темы для этой цели совершенно неправильно: "Свобода запускать программу означает свободу... использовать её... для любых целей..., без необходимости сообщать об этом разработчику или какому-либо другому конкретному лицу. В этой свободе важна цель пользователя, а не цель разработчика; вы как пользователь свободны запускать программу для своих целей, и если вы распространяете её кому-то ещё... вы не вправе навязывать ему свои цели."

Chip Bennett Chip Bennett
19 июл. 2011 г. 23:23:10

Это плохая идея. Будучи начинающим разработчиком плагинов, я по неопытности реализовал нечто подобное, не думая о последствиях для себя и своих пользователей. 1. Это нарушает конфиденциальность пользователей. 2. Если ваша тема получит широкое распространение, вы получите больше писем, чем сможете обработать. 3. Если пункт 2 верен, в зависимости от того, где вы размещаете почту, ваш аккаунт может быть признан нарушающим условия использования. Мой почтовый аккаунт был временно заблокирован из-за этого.

Brian Fegter Brian Fegter
7 авг. 2013 г. 22:41:34

@BrianFegter Полностью согласен. Я был только на начальном этапе обучения, когда пробовал это сделать. Спасибо, что поделились опасениями. Самое замечательное в StackOverflow и StackExchange — это то, что когда смотришь на свои вопросы годичной давности, понимаешь, как сильно ты вырос за это время :-)

Atif Atif
8 авг. 2013 г. 23:52:52
Все ответы на вопрос 5
2
14

Я написал код, который обеспечивает надежные хуки активации/деактивации темы. Пожалуйста, ознакомьтесь и поделитесь вашим мнением!

http://www.krishnakantsharma.com/2011/01/activationdeactivation-hook-for-wordpress-theme/

18 янв. 2011 г. 19:54:21
Комментарии

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

Jan Fabry Jan Fabry
25 янв. 2011 г. 10:58:16

Код Кришны приведен в ответе Бенни

brasofilo brasofilo
21 июн. 2012 г. 16:44:02
1
13

Вот код, просто назовите файл 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);
}
28 янв. 2011 г. 12:19:47
Комментарии

Автор этого кода (Krishna Kant Sharma) также оставил ответ со ссылкой на его источник. Возможно, на момент ответа Benny на этот вопрос он был недостаточно опытным, чтобы просто отредактировать ответ Krishna и добавить туда код, поэтому я поставил минус...

brasofilo brasofilo
21 июн. 2012 г. 16:54:09
1

Для этого нет специализированного хука. Я видел несколько подходов:

Хочу отметить, что отправка себе любой информации без согласия пользователя (а запуск чего-либо при активации не дает возможности запросить такое согласие) может рассматриваться как некорректное поведение.

3 янв. 2011 г. 13:17:32
Комментарии

Это так? Просто URL, чтобы я знал, где это установлено?

Atif Atif
3 янв. 2011 г. 14:07:27
0

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

5 янв. 2015 г. 05:41:26
0

Поместите этот код в начало вашего файла 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 адрес.

Надеюсь, это поможет.

12 янв. 2013 г. 21:40:54