Hook de activación de tema en WordPress - Cómo recibir notificaciones

3 ene 2011, 10:14:35
Vistas: 14.6K
Votos: 14

Me gustaría escribir una función para que me envíe por email la URL del sitio web cuando se active mi tema.

¿Cuál es el hook que se ejecuta cuando se activa un tema?

3
Comentarios

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 estar obligado a comunicarlo al desarrollador o a cualquier otra entidad específica. En esta libertad, es el propósito del usuario lo que importa, no el propósito del desarrollador; tú como usuario eres libre de ejecutar el programa para tus propósitos, y si lo distribuyes a alguien más... no tienes derecho a imponerle tus propósitos."

Chip Bennett Chip Bennett
19 jul 2011 23:23:10

Esta es una mala idea. Como desarrollador de plugins novato al principio, implementé algo así sin pensar en las consecuencias para mí o mis usuarios. 1. Esto viola la privacidad del usuario. 2. Si tu tema está ampliamente distribuido, recibirás más correos de los que posiblemente puedas manejar. 3. Si #2 es cierto, dependiendo de dónde alojes tu correo, tu cuenta podría considerarse en violación de los términos de uso. Mi cuenta de correo fue suspendida por un tiempo debido a esto.

Brian Fegter Brian Fegter
7 ago 2013 22:41:34

@BrianFegter Tiene absolutamente sentido. Solo estaba en mi etapa inicial de aprendizaje cuando intenté esto. Gracias por compartir tus preocupaciones. El mayor hecho sobre StackOverflow y StackExchange es que cuando miras tus preguntas del año pasado, te das cuenta de cuánto has evolucionado con el tiempo :-)

Atif Atif
8 ago 2013 23:52:52
Todas las respuestas a la pregunta 5
2
14

He escrito un código que proporciona ganchos (hooks) confiables de activación/desactivación para temas. Por favor, échale un vistazo y dime qué opinas.

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

18 ene 2011 19:54:21
Comentarios

@Krisha Kant Sharma: Ese código parece prometedor, pero ¿podrías copiarlo en tu respuesta? Así seguirá existiendo si tu blog cambia de ubicación o, por alguna razón, deja de estar disponible.

Jan Fabry Jan Fabry
25 ene 2011 10:58:16

El código de Krishna es el que aparece en la respuesta de Benny

brasofilo brasofilo
21 jun 2012 16:44:02
1
13

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

<?php
/**
 * Proporciona un hook de activación/desactivación para temas de WordPress.
 *
 * @author Krishna Kant Sharma (http://www.krishnakantsharma.com)
 *
 * Uso:
 * ----------------------------------------------
 * Incluye este archivo en el código de tu tema.
 * ----------------------------------------------
 * function my_theme_activate() {
 *    // código a ejecutar durante la activación del tema
 * }
 * wp_register_theme_activation_hook('mytheme', 'my_theme_activate');
 *
 * function my_theme_deactivate() {
 *    // código a ejecutar durante la desactivación del tema
 * }
 * wp_register_theme_deactivation_hook('mytheme', 'my_theme_deactivate');
 * ----------------------------------------------
 * 
 * 
 */

/**
 *
 * @desc registra un hook de activación de tema
 * @param string $code : Código del tema. Puede ser la carpeta base de tu tema. Ej. si tu tema está en la carpeta 'mytheme' entonces el código será 'mytheme'
 * @param callback $function : Función a llamar cuando el tema se active.
 */
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 registra un hook de desactivación
 * @param string $code : Código del tema. Debe coincidir con el valor proporcionado en wp_register_theme_activation_hook como $code
 * @param callback $function : Función a llamar cuando el tema se desactive.
 */
function wp_register_theme_deactivation_hook($code, $function) {
    // almacena la función en un global específico del código
    $GLOBALS["wp_register_theme_deactivation_hook_function" . $code]=$function;

    // crea una función en tiempo de ejecución que eliminará la opción establecida durante la activación de este tema y llamará a la función de desactivación proporcionada en $function
    $fn=create_function('$theme', ' call_user_func($GLOBALS["wp_register_theme_deactivation_hook_function' . $code . '"]); delete_option("theme_is_activated_' . $code. '");');

    // añade la función creada anteriormente al hook de acción switch_theme. Este hook se llama cuando el administrador cambia el tema.
    // Debido a la implementación del núcleo de WordPress, este hook solo puede ser recibido por el tema actualmente activo (que será desactivado ya que el administrador ha elegido otro.
    // Tu tema puede percibir este hook como un hook de desactivación.
    add_action("switch_theme", $fn);
}
28 ene 2011 12:19:47
Comentarios

El autor de este código (Krishna Kant Sharma) también dejó una respuesta con un enlace a su fuente. Quizás para cuando Benny respondió esta pregunta, no tenía suficiente conocimiento como para simplemente editar la respuesta de Krishna y agregar el código a ella, de ahí mi voto negativo...

brasofilo brasofilo
21 jun 2012 16:54:09
1

No existe un hook especializado para esto. He visto un par de enfoques:

Quiero señalar que enviarte por correo electrónico cualquier información sin el consentimiento del usuario (y ejecutar cualquier cosa en la activación no da oportunidad de solicitar esto) puede ser visto como inapropiado.

3 ene 2011 13:17:32
Comentarios

¿Lo es? Solo la URL para que pueda saber dónde está instalado?

Atif Atif
3 ene 2011 14:07:27
0

WordPress ahora proporciona este hook como after_switch_theme. Puedes usarlo así:

add_action('after_switch_theme', 'my_theme_activation');

function my_theme_activation () {
  // HACER TODAS LAS COSAS
}

También puedes usar el hook switch_theme para ejecutar código al desactivar el tema.

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

5 ene 2015 05:41:26
0

Coloca este código al principio de tu archivo functions.php

<?php if ( is_admin() && isset($_GET['activated'] ) && $pagenow == "themes.php" ) {
// hacer lo que necesites
$url = get_site_url();
// El mensaje
$message = "un nuevo tema de WordPress se ha activado en $url ";

// En caso de que alguna línea supere los 70 caracteres, usamos wordwrap()
$message = wordwrap($message, 70, "\r\n");

// Enviar
wp_mail('mail@yourdomain.com', 'tema activado', $message);
}

?>

reemplaza mail@yourdomain.com con tu propia dirección de correo electrónico.

Espero que te ayude.

12 ene 2013 21:40:54