Thème Activer le crochet


15

Je voudrais écrire une fonction pour m'envoyer l'URL du site Web lorsque mon thème est activé.

Quel est le crochet lancé lorsque le thème est activé?


5
Utiliser un crochet d'activation de thème à cet effet est absolument faux : "La liberté d'exécuter le programme signifie la liberté ... de l'utiliser ... pour tout type de ... but, sans être tenu d'en communiquer avec le développeur ou toute autre entité spécifique . Dans cette liberté, c'est le but de l' utilisateur qui compte, pas le but du développeur ; en tant qu'utilisateur, vous êtes libre d'exécuter le programme à vos fins, et si vous le distribuez à quelqu'un d'autre ... vous êtes pas le droit de lui imposer vos fins . "
Chip Bennett

1
C'est une mauvaise idée. En tant que développeur de plugins naïf dès le début, j'ai implémenté quelque chose comme ça sans penser aux conséquences pour moi ou mes utilisateurs. 1. Cela viole la vie privée d'un utilisateur. 2. Si votre thème est largement diffusé, vous recevrez plus d'e-mails que vous ne pouvez en gérer. 3. Si # 2 est vrai, selon l'endroit où vous hébergez votre e-mail, votre compte peut être interprété comme une violation des conditions d'utilisation. Mon compte de messagerie a été fermé pendant un certain temps à cause de cela.
Brian Fegter

@BrianFegter est absolument logique. Je n'en étais qu'à ma première étape d'apprentissage lorsque j'essayais cela. Merci de partager vos préoccupations. Le plus grand fait sur StackOverflow et StackExchange est que lorsque vous regardez vos questions au cours de la dernière année, vous vous rendez compte de ce que vous avez développé de temps en temps :-)
Atif Mohammed Ameenuddin

Réponses:


13

J'ai ce code ici, il suffit de nommer le fichier theme_activation_hook.php comme sur le site Web et de le copier.

<?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
L'auteur de ce code (Krishna Kant Sharma) a également laissé une réponse avec un lien vers sa source. Peut-être qu'au moment où Benny a répondu à cette question, il n'était pas assez averti pour simplement éditer la réponse de Krishna et y ajouter le code, d'où mon downvote ...
brasofilo

14

J'ai écrit un code qui fournit des crochets de thème d'activation / désactivation fiables. Veuillez vérifier et faites-moi savoir ce que vous en pensez!

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


@Krisha Kant Sharma: Ce code semble prometteur, mais pourriez-vous le copier dans votre réponse? Ensuite, il existera toujours si votre blog change d'emplacement ou se déconnecte pour une raison quelconque.
Jan Fabry

1
Le code de Krishna est celui de la réponse de Benny
brasofilo

8

Il n'y a pas de crochet spécialisé pour cela. J'ai vu deux approches:

Je tiens à noter que l'envoi par e-mail de toute information sans le consentement de l'utilisateur (et l'exécution de quoi que ce soit lors de l'activation n'a pas la possibilité de demander une telle information) peut être considéré comme inapproprié.


C'est ça? juste l'URL pour que je sache où il est installé?
Atif Mohammed Ameenuddin le


0

Placez ce code en haut de votre 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);
}

?>

remplacer mail@yourdomain.compar votre propre adresse e-mail.

J'espère que cela aide.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.