Gancho de activación de tema

15

Me gustaría escribir una función para enviarme un correo electrónico con la URL del sitio web cuando se active mi tema.

¿Qué se inicia el gancho cuando se activa el tema?

Atif Mohammed Ameenuddin
fuente
55
Usar un gancho de activación de tema para este propósito es absolutamente incorrecto : "La libertad de ejecutar el programa significa la libertad ... de usarlo ... para cualquier tipo de ... propósito, sin tener que comunicarlo con el desarrollador o cualquier otra entidad específica . En esta libertad, lo que importa es el propósito del usuario , no el propósito del desarrollador ; usted como usuario es libre de ejecutar el programa para sus propósitos, y si lo distribuye a otra persona ... usted es no tiene derecho a imponerle sus propósitos ".
Chip Bennett
1
Esta es una mala idea. Como desarrollador ingenuo de complementos desde el principio, implementé algo como esto sin pensar en las consecuencias para mí o para mis usuarios. 1. Esto viola la privacidad de un usuario. 2. Si su tema está ampliamente distribuido, recibirá más correos electrónicos de los que posiblemente pueda manejar. 3. Si el # 2 es verdadero, dependiendo de dónde aloje su correo electrónico, su cuenta podría interpretarse como una violación de los términos de uso. Mi cuenta de correo electrónico se cerró por un tiempo debido a esto.
Brian Fegter
@BrianFegter Absolutamente tiene sentido. Solo estaba en mi etapa de aprendizaje inicial cuando estaba probando esto. Gracias por compartir preocupaciones. El hecho más importante sobre StackOverflow y StackExchange es que cuando observa sus preguntas en el último año, se da cuenta de cuánto se ha desarrollado de vez en cuando :-)
Atif Mohammed Ameenuddin

Respuestas:

13

Tengo ese código aquí, solo nombra el archivo theme_activation_hook.php como en el sitio web y copia esto.

<?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
fuente
1
El autor de este código (Krishna Kant Sharma) también dejó una respuesta con un enlace a su fuente. Tal vez en el momento en Benny respondió a esta pregunta, no era lo suficientemente inteligentes como para simplemente la respuesta de edición de Krishna y añadir el código a la misma, de ahí mi downvote ...
brasofilo
14

He escrito un código que proporciona un enlace de tema de activación / desactivación confiable. ¡Por favor échale un vistazo y déjame saber qué piensan ustedes!

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


fuente
@Krisha Kant Sharma: Ese código parece prometedor, pero ¿podría copiarlo en su respuesta? Entonces seguirá existiendo si su blog alguna vez cambia de ubicación, o por alguna razón se desconecta.
Jan Fabry
1
El código de Krishna es el que está en la respuesta de Benny
brasofilo
8

No hay un gancho especializado para esto. He visto un par de enfoques:

Quiero señalar que enviar cualquier información por correo electrónico sin el consentimiento del usuario (y ejecutar cualquier cosa en la activación no tiene la oportunidad de solicitarla) puede considerarse inapropiada.

Rarst
fuente
¿Lo es? solo la URL para saber dónde está instalado?
Atif Mohammed Ameenuddin
3

Wordpress ahora proporciona este gancho como after_switch_theme. Puedes usarlo así:

add_action('after_switch_theme', 'my_theme_activation');

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

También puede usar el switch_themegancho para ejecutar código en la desactivación del tema .

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

Christian Varga
fuente
0

Coloque este código en la parte superior de su 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);
}

?>

reemplace [email protected]con su propia dirección de correo electrónico.

Espero eso ayude.

Diseño web APR
fuente