Theme Hook aktivieren

15

Ich möchte eine Funktion schreiben, um mir die URL der Website per E-Mail zu senden, wenn mein Thema aktiviert ist.

Was wird der Hook ausgelöst, wenn das Theme aktiviert wird?

Atif Mohammed Ameenuddin
quelle
5
Die Verwendung eines Theme-Aktivierungs-Hooks für diesen Zweck ist absolut falsch : "Die Freiheit, das Programm auszuführen, bedeutet die Freiheit, es ... für jede Art von ... Zweck zu verwenden, ohne mit dem Entwickler darüber kommunizieren zu müssen oder jede andere spezifische Entität . auf diese Freiheit ist es die des Benutzers Zweck , dass Angelegenheiten, nicht die Entwickler Zweck , Sie als Benutzer sind frei , das Programm für Ihre Zwecke zu laufen, und wenn Sie es an eine andere Person zu verteilen ... Sie sind nicht berechtigt, ihr deine Absichten aufzuzwingen . "
Chip Bennett
1
Das ist eine schlechte Idee. Als naiver Plugin-Entwickler habe ich so etwas schon früh implementiert, ohne über die Konsequenzen für mich oder meine Benutzer nachzudenken. 1. Dies verletzt die Privatsphäre eines Benutzers. 2. Wenn Ihr Thema weit verbreitet ist, erhalten Sie mehr E-Mails, als Sie möglicherweise verarbeiten können. 3. Wenn # 2 zutrifft, kann Ihr Konto in Abhängigkeit davon, wo Sie Ihre E-Mail hosten, als Verstoß gegen die Nutzungsbedingungen ausgelegt werden. Mein E-Mail-Konto wurde aus diesem Grund für eine Weile geschlossen.
Brian Fegter
@ BrianFegter Absolut sinnvoll. Ich befand mich erst in meiner anfänglichen Lernphase, als ich das ausprobierte. Vielen Dank, dass Sie uns Ihre Bedenken mitteilen. Die größte Tatsache bei StackOverflow und StackExchange ist, dass Sie bei einem Blick auf Ihre Fragen im letzten Jahr feststellen, wie viel Sie sich von Zeit zu Zeit entwickelt haben :-)
Atif Mohammed Ameenuddin

Antworten:

13

Ich habe diesen Code hier, benenne einfach die Datei theme_activation_hook.php wie auf der Website und kopiere diese.

<?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);
}
Benny
quelle
1
Der Autor dieses Codes (Krishna Kant Sharma) hinterließ ebenfalls eine Antwort mit einem Link zu seiner Quelle. Vielleicht durch die Zeit , Benny diese Frage beantwortet, er war nicht klug genug , um einfach Antwort des bearbeiten Krishna und den Code , um es hinzuzufügen, daher meine downvote ...
brasofilo
14

Ich habe einen Code geschrieben, der eine zuverlässige Aktivierung / Deaktivierung von Themen-Hooks bietet. Bitte schaut es euch an und lasst mich wissen, was ihr denkt!

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


quelle
@Krisha Kant Sharma: Dieser Code sieht vielversprechend aus, aber können Sie ihn in Ihre Antwort kopieren? Dann bleibt es bestehen, wenn Ihr Blog den Speicherort ändert oder aus irgendeinem Grund offline geschaltet wird.
Jan Fabry
1
Krishnas Code ist der Code in Bennys Antwort
brasofilo
8

Hierfür gibt es keinen speziellen Haken. Ich habe einige Ansätze gesehen:

Ich möchte darauf hinweisen, dass das Versenden von Informationen per E-Mail ohne Zustimmung des Benutzers (und das Ausführen von Elementen bei der Aktivierung hat keine Möglichkeit, solche anzufordern) als unangemessen angesehen werden kann.

Rarst
quelle
Ist es? Nur die URL, damit ich weiß, wo sie installiert ist?
Atif Mohammed Ameenuddin
3

Wordpress bietet diesen Hook nun als after_switch_theme. Du kannst es so benutzen:

add_action('after_switch_theme', 'my_theme_activation');

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

Sie können den switch_themeHook auch verwenden, um Code bei der Deaktivierung eines Themas auszuführen .

Quelle: http://codex.wordpress.org/Plugin_API/Action_Reference/after_switch_theme

Christian Varga
quelle
0

Platzieren Sie diesen Code oben in Ihrem 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('[email protected]', 'theme geactiveerd', $message);
}

?>

Ersetzen Sie [email protected]mit Ihrer eigenen E-Mail-Adresse.

Ich hoffe es hilft.

APR Webdesign
quelle