Тема Активувати гачок


15

Я хотів би написати функцію, щоб надіслати мені електронну пошту URL веб-сайту, коли активується моя тема.

Який гак ініціюється, коли тема активована?


5
Використовувати для цієї мети гачок тематичної активації абсолютно неправильно : "Свобода запуску програми означає свободу ... використовувати її ... для будь-яких ... цілей, не вимагаючи спілкування про це з розробником. або будь-яка інша особа . У цій свободі має значення саме ціль користувача , а не мета розробника ; ви як користувач можете безкоштовно запускати програму для своїх цілей, і якщо ви поширюєте її на когось іншого ... ви не має права нав'язувати їй свої цілі ".
Чіп Беннетт

1
Це погана ідея. Як наївний розробник плагінів на початку, я реалізував щось подібне, не замислюючись про наслідки для мене або моїх користувачів. 1. Це порушує конфіденційність користувача. 2. Якщо ваша тема широко розповсюджена, ви отримаєте більше електронної пошти, ніж ви, можливо, зможете обробити. 3. Якщо №2 відповідає дійсності, залежно від місця розміщення електронної пошти, ваш обліковий запис може розглядатися як таке, що порушує умови використання. Мій обліковий запис електронної пошти на деякий час був закритий через це.
Брайан Фегтер

@BrianFegter Абсолютно має сенс. Коли я спробував це, я був лише на початковому етапі навчання. Дякуємо, що поділилися проблемами. Найбільший факт щодо StackOverflow та StackExchange - це те, що, дивлячись на свої запитання за минулий рік, ти розумієш, наскільки ти розвинувся час від часу :-)
Atif Mohammed Ameenuddin

Відповіді:


13

У мене є цей код, просто назвіть файл topic_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

Для цього немає спеціалізованого гака. Я бачив пару підходів:

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


Є це? просто 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на власну електронну адресу.

Сподіваюся, це допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.