after_setup_theme siempre se ejecuta

11

Estoy configurando un tema secundario para algunos de los miembros de mi facultad, y como parte del tema, me gustaría que se activaran algunos complementos en el momento en que se activó el tema. Así que, naturalmente, usé la acción after_setup_theme y llamé a mi función de configuración. Funciona muy bien, excepto que se ejecuta en CADA solicitud (admin y de otra manera). Probé esto agregando esto al final de la función de configuración:

echo '<script type="text/javascript">alert("This action was run")</script>';

Y como resultado, obtenga una alerta de javascript en cada solicitud de administrador y en cada solicitud de front-end (tengo una configuración de red, por lo que obviamente en sitios donde este tema no está activo, no ejecuta la función)

Entonces la pregunta es, ¿es esto un error? ¿Estoy haciendo algo mal de alguna manera? Aquí está el código completo que estoy usando:

add_action( 'after_setup_theme', 'fwp_setup' );
function fwp_setup(){
    // -- Unrelated code remove for the sake of brevity 
    require_once($_SERVER['DOCUMENT_ROOT'].'/wp-admin/includes/plugin.php');
    activate_plugin('enable-media-replace/enable-media-replace.php');
    activate_plugin('seo-image/seo-friendly-images.php');
    activate_plugin('w3-total-cache/w3-total-cache.php');
    echo '<script type="text/javascript">alert("This action was run")</script>';
}

¡Cualquier idea sería muy apreciada!

    
pregunta Aaron Wagner 26.04.2012 - 14:19

5 respuestas

8

SOLUCIÓN: after_switch_theme hace exactamente lo que pretendía aquí. Se dispara después de que el tema se cambia a tu tema. Una de las soluciones mencionadas a continuación utiliza switch_theme . Esto no tiene los resultados deseados, ya que solo ocurre al cambiar de tema.

Aquí hay un artículo que encontré como referencia: enlace

Aquí está mi código modificado

add_action( 'after_switch_theme', 'fwp_theme_setup' );
function fwp_theme_setup(){ 
    require_once($_SERVER['DOCUMENT_ROOT'].'/wp-admin/includes/plugin.php');
    activate_plugin('enable-media-replace/enable-media-replace.php');
    activate_plugin('seo-image/seo-friendly-images.php');
    activate_plugin('w3-total-cache/w3-total-cache.php');
}
    
respondido por el Aaron Wagner 26.04.2012 - 22:20
5

La acción after_setup_theme está destinada para activarse en cada carga de WordPress. Simplemente es parte del proceso durante el cual WordPress invoca el sistema de plantillas, determina los diversos parámetros de configuración del tema y luego continúa con el procesamiento posterior, como determinar la plantilla correcta para mostrar, etc.

En otras palabras, after_setup_theme representa el punto en el que WordPress configura el tema actual, no el punto en el que el administrador activa y / o configura el tema actual.

Lo que está buscando es un gancho de activación del tema, que actualmente no está disponible, pero está bajo consideración / desarrollo .

    
respondido por el Chip Bennett 26.04.2012 - 14:30
4

Lamentablemente no hay un gancho de activación de tema. Sin embargo, una esta pregunta proporciona una solución alternativa para eso.

Simplemente use el 'gancho de activación de tema' para activar los complementos.

Una mejor solución, en la misma línea es esta . Ambos usan esencialmente el switch_theme hook.

Según los comentarios del OP y el ticket de trac vinculado - after_switch_theme es el gancho requerido.

Esto pasa el nombre del tema antiguo como un argumento. Sin embargo, si esto está en su functions.php (que debería ser ...), la devolución de llamada solo se activará cuando su tema se esté activando .

add_action( 'after_switch_theme', 'wpse50298_setup' );
function wpse50298_setup($theme_switching_from){
    // Your theme is being activated
}

Del mismo modo, agregar una devolución de llamada a switch_theme solo se llamará cuando se desactive su tema.

add_action( 'switch_theme', 'wpse50298_deactivate' );
function wpse50298_deactivate($theme_switching_to){
    // Your theme is being deactivated
}
    
respondido por el Stephen Harris 26.04.2012 - 14:30
0

Una mejor solución podría ser utilizar secuencia de comandos de activación del complemento de Thomas Griffin . Esto pedirá a los usuarios que instalen los complementos de su elección cuando el tema esté en uso. Creo que esta es una excelente manera de separar el complemento del tema y seguir utilizándolo.

Dentro de su tema, verifique si el complemento está activo antes de usar sus funciones. Esto permitirá a los usuarios más opciones y control.

Puede configurar el script de activación fácilmente con Mochila .

    
respondido por el Jeff Sebring 05.05.2012 - 03:35
0

Su mejor solución ahora sería utilizar switch_theme hook y filtrar el argumento '$ theme' pasado para ver si es el actual, si no regresa;

function nw_update_network($theme) {
   if ($theme !== 'my_theme_name') return;

   // Your code here
}

add_action('switch_theme', 'nw_update_network');
    
respondido por el numediaweb 07.06.2015 - 21:19

Lea otras preguntas en las etiquetas