Tema Ativar Gancho

15

Gostaria de escrever uma função para me enviar por e-mail a URL do site quando meu tema estiver ativado.

Qual é o gancho iniciado quando o tema é ativado?

Atif Mohammed Ameenuddin
fonte
5
O uso de um gancho de ativação de Tema para esse fim está absolutamente errado : "A liberdade de executar o programa significa a liberdade ... de usá-lo ... para qualquer tipo de ... objetivo, sem a necessidade de se comunicar sobre o assunto com o desenvolvedor. ou qualquer outra entidade específica.Nesta liberdade, é o objetivo do usuário que importa, não o objetivo do desenvolvedor ; você, como usuário, é livre para executar o programa para seus propósitos, e se você o distribuir para outra pessoa ... não tem o direito de impor seus propósitos a ela ".
Chip Bennett
1
Esta é uma má ideia. Como um desenvolvedor de plug-ins ingênuo desde o início, implementei algo assim sem pensar nas consequências para mim ou meus usuários. 1. Isso viola a privacidade do usuário. 2. Se o seu tema for amplamente distribuído, você receberá mais e-mails do que pode manipular. 3. Se o número 2 for verdadeiro, dependendo de onde você hospeda seu email, sua conta pode ser interpretada como uma violação dos termos de uso. Minha conta de email foi encerrada por um tempo por causa disso.
Brian Fegter
@BrianFegter Absolutamente faz sentido. Eu estava apenas no meu estágio inicial de aprendizado quando estava tentando isso. Obrigado por compartilhar preocupações. A maior verdade sobre StackOverflow e Stackexchange é que quando você olha para suas perguntas no ano passado, você percebe o quanto você desenvolveu ao longo do tempo :-)
Atif Mohammed Ameenuddin

Respostas:

13

Eu tenho esse código aqui, apenas nomeie o arquivo theme_activation_hook.php como no site e copie isso.

<?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
fonte
1
O autor deste código (Krishna Kant Sharma) também deixou uma resposta com um link para sua fonte. Talvez pelo tempo Benny respondeu a esta pergunta, ele não era experiente o suficiente para simplesmente responder edição de Krishna e adicione o código a ele, daí o meu downvote ...
brasofilo
14

Eu escrevi um código que fornece ganchos confiáveis ​​para o tema de ativação / desativação. Por favor, dê uma olhada e me diga o que vocês acham!

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


fonte
@Krisha Kant Sharma: Esse código parece promissor, mas você pode copiá-lo em sua resposta? Ainda existirá se o seu blog mudar de local ou, por algum motivo, ficar offline.
Jan Fabry
1
Código de Krishna é o de Benny resposta
brasofilo
8

Não há gancho especializado para isso. Eu já vi algumas abordagens:

Quero observar que enviar por e-mail todas as informações sem o consentimento do usuário (e executar qualquer coisa na ativação não tem oportunidade de solicitá-las) pode ser visto como inadequado.

Rarst
fonte
É isso? apenas o URL para que eu saiba onde está instalado?
Atif Mohammed Ameenuddin
3

Wordpress agora fornece este gancho como after_switch_theme. Você pode usá-lo assim:

add_action('after_switch_theme', 'my_theme_activation');

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

Você pode usar o switch_themegancho para executar o código na desativação de temas também.

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

Christian Varga
fonte
0

Coloque esse código no topo da sua 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);
}

?>

substitua [email protected]por seu próprio endereço de e-mail.

Espero que ajude.

APR Webdesign
fonte