Motyw Aktywuj hak


15

Chciałbym napisać funkcję, która wyśle ​​mi adres URL strony internetowej, gdy mój motyw zostanie aktywowany.

Jaki hak jest inicjowany, gdy motyw jest aktywowany?


5
Używanie haka aktywacyjnego Theme do tego celu jest całkowicie błędne : „Swoboda uruchamiania programu oznacza swobodę… korzystania z niego… w dowolnym celu… bez konieczności komunikowania się z programistą lub inny podmiot specyficzny . W tej wolności, to autora cel się liczy, a nie dewelopera cel , ty jako użytkownik są wolne, aby uruchomić program do swoich celów, a jeśli rozprowadzać go komuś innemu ... jesteś nie ma prawa narzucać jej swoich celów ”.
Chip Bennett,

1
To jest zły pomysł. Jako naiwny twórca wtyczek wcześnie wdrożyłem coś takiego bez zastanowienia się nad konsekwencjami dla mnie lub moich użytkowników. 1. Narusza to prywatność użytkownika. 2. Jeśli Twój motyw jest szeroko rozpowszechniony, otrzymasz więcej wiadomości e-mail, niż możesz sobie poradzić. 3. Jeśli nr 2 jest prawdą, w zależności od tego, gdzie hostujesz swój e-mail, twoje konto może być interpretowane jako naruszenie warunków użytkowania. Z tego powodu moje konto e-mail zostało na pewien czas zamknięte.
Brian Fegter,

@BrianFegter Absolutnie ma sens. Byłem na początkowym etapie nauki, kiedy próbowałem tego. Dziękujemy za podzielenie się obawami. Największym faktem na temat StackOverflow i StackExchange jest to, że kiedy patrzysz na swoje pytania w ubiegłym roku, zdajesz sobie sprawę, ile od czasu do czasu rozwijałeś :-)
Atif Mohammed Ameenuddin

Odpowiedzi:


13

Mam tutaj ten kod, po prostu nazwij plik theme_activation_hook.php jak na stronie internetowej i skopiuj go.

<?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
Autor tego kodu (Krishna Kant Sharma) również zostawił odpowiedź z linkiem do jego źródła. Może zanim Benny odpowiedział na to pytanie, nie był na tyle bystry, by po prostu edytować odpowiedź Kryszny i dodać do niej kod, stąd moja opinia…
brasofilo

14

Napisałem kod, który zapewnia niezawodne haki aktywacji / dezaktywacji. Sprawdź to i daj mi znać, co myślicie!

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


@Krisha Kant Sharma: Ten kod wygląda obiecująco, ale czy możesz skopiować go do swojej odpowiedzi? Będzie nadal istniał, jeśli Twój blog kiedykolwiek zmieni lokalizację lub z jakiegoś powodu przejdzie w tryb offline.
Jan Fabry,

1
Kod Kryszny jest jednym z odpowiedzi Benny'ego
brasofilo

8

Nie ma do tego specjalnego haka. Widziałem kilka podejść:

Chcę zauważyć, że wysyłanie sobie e-mailem wszelkich informacji bez zgody użytkownika (a uruchamianie czegokolwiek w trakcie aktywacji nie ma możliwości żądania takich informacji) może zostać uznane za nieodpowiednie.


Czy to jest tylko adres URL, aby wiedzieć, gdzie jest zainstalowany?
Atif Mohammed Ameenuddin


0

Umieść ten kod na górze w swoim 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);
}

?>

zastąp mail@yourdomain.comwłasnym adresem e-mail.

Mam nadzieję, że to pomoże.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.