Hook di attivazione del tema WordPress?

16 feb 2013, 18:59:29
Visualizzazioni: 20.6K
Voti: 16

Conosco molti trucchi per verificare se un determinato tema è attivato e ho esplorato approfonditamente internet. Non sono alla ricerca di codice già esistente da copiare e incollare. Quello che sto cercando è sapere se le versioni 3.3-3.5 hanno introdotto una nuova funzione che si attiva durante theme_init. Ho visto qualche tipo di hook nel codex, relativo all'esecuzione di azioni dopo l'inizializzazione di un tema, ma non ricordo dove.

Qualcuno lo sa?

0
Tutte le risposte alla domanda 6
0
47

Per chiunque si imbatta in questa domanda; esiste un'azione a cui puoi agganciarti (aggiunta nella versione 3.3.0) che viene attivata solo durante l'attivazione di un nuovo tema: after_switch_theme

add_action('after_switch_theme', 'mytheme_setup_options');

function mytheme_setup_options () {
  //eseguendo un'operazione...
}

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

Per eseguire un'azione durante la disattivazione di un tema, puoi utilizzare l'azione correlata: switch_theme

27 set 2014 22:33:31
1

Con le funzionalità di anteprima del tema, è improbabile che ci sarà mai un hook di attivazione del tema poiché i temi devono funzionare anche senza essere "attivati".

16 feb 2013 19:21:22
Commenti

Buon punto @mark-kaplun

wesamly wesamly
16 ott 2016 15:26:46
3

Dopo aver provato il metodo di @sleepingkiwi mi sono imbattuto in un problema. Un client potrebbe provare un tema diverso (anche solo per un momento), il che potrebbe creare un problema poiché l'hook "on theme activation" che abbiamo creato viene eseguito due volte.

Il metodo migliore è utilizzare after_switch_theme insieme alla funzione "update_option" di WordPress per salvare e successivamente verificare un avviso di attivazione, rendendo così questo metodo a prova di errore.

Esempio:

add_action('after_switch_theme', 'sgx_activation_hook');
function sgx_activation_hook() {
    if(get_option('SOMEPREFIX_theme_activated') != '1') {

        update_option( 'SOMEPREFIX_theme_activated', '1' );

        // ESEGUI QUI LE OPERAZIONI DI ATTIVAZIONE DEL TEMA

    }
}

Spero sia utile.

18 set 2017 23:59:37
Commenti

Non dovrebbe essere così, il codex specifica che si attiva solo per il tema corrente: Le funzioni del tema collegate a questo hook vengono attivate solo nel tema (e/o child theme) che viene attivato. codex

Gerard Reches Gerard Reches
27 mag 2020 01:57:26

Ma è una cosa positiva, no? dobbiamo anche fare un po' di pulizia dopo che il tema viene disattivato - ma in generale, penso sia positivo dato che è una cosa legata al tema

Sagive Sagive
28 mag 2020 16:56:39

Certo, lo rende più semplice

Gerard Reches Gerard Reches
29 mag 2020 02:11:24
0

Utilizzo questo codice per creare gli hook register_vuewp_theme e unregister_vuewp_theme, così posso collegare facilmente delle funzioni a questi hook.

function register_vuewp() {
    $one = get_option('vuewp_theme');
    if (false == $one) {
        update_option('vuewp_theme', 'on');
        do_action('register_vuewp_theme');
    }
}
add_action('admin_init', 'register_vuewp');

function unregister_vuewp() {
    delete_option('vuewp_theme');
    do_action('unregister_vuewp_theme');
}
add_action('switch_theme', 'unregister_vuewp');
21 lug 2023 21:52:49
0

L'hook di azione after_switch_theme a volte potrebbe fallire perché viene attivato solo se il tema precedente esiste ancora. Questo è documentato nel codex.

Puoi anche verificarlo direttamente in wp-includes/theme.php nella funzione check_theme_switched() dove viene aggiunto l'hook di azione. Vedrai che l'hook di azione "after_switch_theme" si trova all'interno della condizione if ( $old_theme->exists() ) {....}

Se vuoi essere sicuro che l'hook venga attivato ogni volta che un tema viene attivato, indipendentemente dal fatto che il tema precedente esista ancora, puoi creare il tuo hook personalizzato agganciandoti al cambiamento dell'opzione "stylesheet". Ogni volta che un tema viene attivato, questa opzione memorizza il nome del nuovo tema attivo. Quindi:

add_action( 'update_option_stylesheet','my_theme_activation_hook',20,3 );
add_action( 'update_site_option_stylesheet','my_theme_activation_hook',20,3 ); //Per installazioni multisito

function my_theme_activation_hook( $old_value, $value, $option ){
    //Aggiunge un hook di azione dopo l'attivazione del tema, indipendentemente dal fatto che il tema precedente esista ancora
    do_action( 'my_after_theme_activation');
}

Quindi puoi utilizzare il tuo hook di azione "my_after_theme_activation" o qualsiasi altro nome tu voglia dargli.

Questo metodo non è perfetto perché un plugin potrebbe anche aggiornare l'opzione "stylesheet" senza una vera attivazione del tema. Non vedo perché dovrebbero farlo, ma è consentito, e non si sa mai. Quindi, terrei questo in considerazione. Usalo se per te non è un problema che venga attivato anche se un nuovo tema non viene realmente attivato, ma uno dei plugin ha semplicemente modificato l'opzione "stylesheet".

Potresti anche agganciarti direttamente al cambiamento dell'opzione "theme_switched" invece di "stylesheet". Non l'ho testato, ma guardando il codice sembra che venga attivato due volte quando attivi un nuovo tema. La prima volta per salvare il foglio di stile del tema precedente, e una seconda volta per salvare il valore "false".

3 nov 2022 13:47:22
5
16 feb 2013 19:07:44
Commenti

posso usare la stessa funzione per fare qualcosa dopo la disattivazione? L'esempio sembra suggerirlo ma sono curioso

TheWebs TheWebs
16 feb 2013 19:11:39

puoi lavorare con $_GET['previewed'] e $_GET['theme']

birgire birgire
16 feb 2013 19:20:32

-1 perché questo hook viene attivato ad ogni init di WP. Viene attivato dopo l'inclusione del file functions.php del tema, quindi non è un hook di "attivazione".

Mark Kaplun Mark Kaplun
16 feb 2013 19:20:41

sì vero, ma la soluzione per quello è menzionata nella pagina del Codex, per verificare i parametri GET sopra o $_GET['activated']

birgire birgire
16 feb 2013 19:23:46

Questa è una risposta sbagliata che ho postato qui molto tempo fa, per favore evitatela, non si possono rimuovere quelle accettate, grazie

birgire birgire
4 mar 2022 21:02:08