after_setup_theme funziona sempre


11

Sto creando un tema figlio per alcuni membri della mia facoltà e, come parte del tema, vorrei che una manciata di plugin venisse attivata nel momento in cui il tema è attivato. Quindi, naturalmente, ho usato l'azione after_setup_theme e ho chiamato la mia funzione di installazione. Funziona alla grande, tranne che funziona su OGNI richiesta (admin e non). Ho dimostrato questo aggiungendo questo alla fine della funzione di installazione:

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

E di conseguenza ricevi un avviso javascript su ogni richiesta di amministratore e ogni richiesta di front-end (ho una configurazione di rete, quindi ovviamente su siti in cui questo tema non è attivo, non esegue la funzione)

Quindi la domanda è: è un bug? Sto facendo qualcosa di sbagliato? Ecco il codice completo che sto 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>';
}

Qualsiasi approfondimento sarebbe molto apprezzato!


SOLUZIONE: after_switch_themefa esattamente quello che intendevo qui. Viene attivato dopo che il tema è passato al tema. Una delle soluzioni menzionate di seguito utilizza switch_theme. Questo non ha i risultati desiderati, poiché accade solo quando si passa dal tema.
Aaron Wagner il

per favore pubblicalo come una risposta , piuttosto che come un commento alla tua domanda. :)
Chip Bennett,

2
Scuse. Non me lo permetterebbe ancora. Lo aggiungerò come risposta tra un po '.
Aaron Wagner,

Risposte:


8

SOLUZIONE: after_switch_themefa esattamente quello che intendevo qui. Viene attivato dopo che il tema è passato al tema. Una delle soluzioni menzionate di seguito utilizza switch_theme. Questo non ha i risultati desiderati, poiché accade solo quando si passa dal tema.

Ecco un articolo che ho trovato come riferimento: http://core.trac.wordpress.org/ticket/7795#comment:29

Ecco il mio codice modificato

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');
}

5

L' after_setup_themeazione ha lo scopo di attivarsi su ogni caricamento di WordPress. Fa semplicemente parte del processo durante il quale WordPress richiama il sistema dei modelli, determina i vari parametri di configurazione per il tema e quindi procede con la successiva elaborazione, come determinare il modello corretto da visualizzare, ecc.

In altre parole, after_setup_themerappresenta il punto in cui WordPress imposta il tema corrente, non il punto in cui l' amministratore attiva e / o configura il tema corrente.

Quello che stai cercando è un hook di attivazione del tema , che al momento non è disponibile, ma è in fase di studio / sviluppo .


Il link di entrata al Codex è quindi terribilmente fuorviante. Dice "Questo hook viene chiamato durante l'inizializzazione di temi". Ciò significa, per me, che l'hook deve essere chiamato quando è attivato. Capisco quello che stai dicendo però. Terribilmente fuorviante.
Aaron Wagner,

5
init !== activation. Normalmente si chiama __construct()funzione in php anche una initfunzione. Ciò significa: inizializzare l'istanza.
Kaiser

Il biglietto trac ha 7 anni e sembra non essere stato risolto!
numediaweb,

4

Sfortunatamente non esiste un hook di attivazione del tema. Tuttavia, questa domanda fornisce una soluzione per questo.

Usa semplicemente il 'hook di attivazione del tema' per attivare i plug-in.

Una soluzione migliore, lungo la stessa vena è questa . Entrambi usano essenzialmente il switch_themegancio.


Secondo i commenti OP e il ticket trac collegato - after_switch_themeè l'hook richiesto.

Questo passa il nome del vecchio tema come argomento. Tuttavia, se questo è nel tuo functions.php(che dovrebbe essere ...) il callback si attiverà solo quando il tuo tema verrà attivato .

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

Allo stesso modo aggiungere un callback a switch_themeverrà chiamato solo quando il tema è disattivato.

add_action( 'switch_theme', 'wpse50298_deactivate' );
function wpse50298_deactivate($theme_switching_to){
    // Your theme is being deactivated
}

Nessuna di queste opzioni ha funzionato per me. switch_themeha funzionato solo dopo aver disattivato il tema. Tuttavia, ha after_switch_themefunzionato perfettamente.
Aaron Wagner,

1
risposta aggiornata :)
Stephen Harris,

switch_theme non sembra più funzionare. Penso che sia a causa dei cambiamenti nell'attivazione 3.4. Almeno non funziona per me.
Jake,

after_switch_theme funziona perfettamente. Questa dovrebbe essere la risposta accettata. Sto usando WP 3.5
Ardee Aram il

0

Una soluzione migliore potrebbe essere quella di utilizzare lo script di attivazione del plugin di Thomas Griffin . Questo richiederà agli utenti di installare plugin di tua scelta quando il tema è in uso. Penso che questo sia un ottimo modo per separare il plugin dal tema, e comunque utilizzarlo.

All'interno del tema, controlla se il plug-in è attivo prima di utilizzare le sue funzioni. Ciò consentirà agli utenti una maggiore scelta e controllo.

Puoi impostare facilmente lo script di attivazione con Knapsack .



0

La soluzione migliore sarebbe ora utilizzare switch_themehook e filtrare l'argomento "$ theme" passato per vedere se è attuale, se non restituire;

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

   // Your code here
}

add_action('switch_theme', 'nw_update_network');
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.