Тема Активировать Крюк

15

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

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

Атиф Мухаммед Аминуддин
источник
5
Использование ловушки активации Theme для этой цели абсолютно неправильно : «Свобода запуска программы означает свободу ... использовать ее ... для любых целей ... без необходимости общаться с разработчиком об этом» или любой другой конкретный объект . в этой свободе, это пользователь цель , что вопросы, не в разработчика цель , вы как пользователь свободно запускать программу для ваших целей, и если вы будете распространять его кому - то другому ... вы не вправе навязывать ей свои цели .
Чип Беннетт
1
Это плохая идея. Как наивный разработчик плагинов, я реализовал нечто подобное, не задумываясь о последствиях для меня или моих пользователей. 1. Это нарушает конфиденциальность пользователя. 2. Если ваша тема широко распространена, вы получите больше сообщений электронной почты, чем сможете. 3. Если № 2 верно, в зависимости от того, где вы размещаете свою электронную почту, ваша учетная запись может быть истолкована как нарушение условий использования. Моя учетная запись электронной почты была закрыта на некоторое время из-за этого.
Брайан Фегтер
@BrianFegter Абсолютно имеет смысл. Я был только на начальном этапе обучения, когда я пробовал это. Спасибо, что поделились проблемами. Самый важный факт о StackOverflow и StackExchange заключается в том, что когда вы смотрите на свои вопросы в прошлом году, вы понимаете, как много вы время от времени развивали :-)
Атиф Мохаммед Аминуддин

Ответы:

13

У меня есть этот код здесь, просто назовите файл theme_activation_hook.php как на сайте и скопируйте его.

<?php
/**
 * Provides activation/deactivation hook for wordpress theme.
 *
 * @author Krishna Kant Sharma (http://www.krishnakantsharma.com)
 *
 * Usage:
 * ----------------------------------------------
 * Include this file in your theme code.
 * ----------------------------------------------
 * function my_theme_activate() {
 *    // code to execute on theme activation
 * }
 * wp_register_theme_activation_hook('mytheme', 'my_theme_activate');
 *
 * function my_theme_deactivate() {
 *    // code to execute on theme deactivation
 * }
 * wp_register_theme_deactivation_hook('mytheme', 'my_theme_deactivate');
 * ----------------------------------------------
 * 
 * 
 */

/**
 *
 * @desc registers a theme activation hook
 * @param string $code : Code of the theme. This can be the base folder of your theme. Eg if your theme is in folder 'mytheme' then code will be 'mytheme'
 * @param callback $function : Function to call when theme gets activated.
 */
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 registers deactivation hook
 * @param string $code : Code of the theme. This must match the value you provided in wp_register_theme_activation_hook function as $code
 * @param callback $function : Function to call when theme gets deactivated.
 */
function wp_register_theme_deactivation_hook($code, $function) {
    // store function in code specific global
    $GLOBALS["wp_register_theme_deactivation_hook_function" . $code]=$function;

    // create a runtime function which will delete the option set while activation of this theme and will call deactivation function provided in $function
    $fn=create_function('$theme', ' call_user_func($GLOBALS["wp_register_theme_deactivation_hook_function' . $code . '"]); delete_option("theme_is_activated_' . $code. '");');

    // add above created function to switch_theme action hook. This hook gets called when admin changes the theme.
    // Due to wordpress core implementation this hook can only be received by currently active theme (which is going to be deactivated as admin has chosen another one.
    // Your theme can perceive this hook as a deactivation hook.
    add_action("switch_theme", $fn);
}
Бенни
источник
1
Автор этого кода (Кришна Кант Шарма) также оставил ответ со ссылкой на его источник. Возможно, к тому времени, когда Бенни ответил на этот вопрос, он не был достаточно сообразителен, чтобы просто отредактировать ответ Кришны и добавить к нему код, отсюда и мое отрицательное мнение ...
brasofilo
14

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

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


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

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

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

Rarst
источник
Это? просто URL, чтобы я мог знать, где он установлен?
Атиф Мохаммед Амеенуддин
3

Wordpress теперь предоставляет этот хук как after_switch_theme. Вы можете использовать это так:

add_action('after_switch_theme', 'my_theme_activation');

function my_theme_activation () {
  // DO ALL THE THINGS
}

Вы также можете использовать switch_themeловушку для запуска кода при деактивации темы .

Источник: http://codex.wordpress.org/Plugin_API/Action_Reference/after_switch_theme

Кристиан Варга
источник
0

Поместите этот код в верхней части вашего functions.php

<?php if ( is_admin() && isset($_GET['activated'] ) && $pagenow == "themes.php" ) {
// do your stuff
$url = get_site_url();
// The message
$message = "a new wordpress theme is activated on $url ";

// In case any of our lines are larger than 70 characters, we should use wordwrap()
$message = wordwrap($message, 70, "\r\n");

// Send
wp_mail('mail@yourdomain.com', 'theme geactiveerd', $message);
}

?>

заменить mail@yourdomain.comна свой адрес электронной почты.

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

APR Webdesign
источник