Hook di attivazione del tema WordPress?
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?
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

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.

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

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

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

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".

Potresti cercare l'hook after_setup_theme
:
http://codex.wordpress.org/Plugin_API/Action_Reference/after_setup_theme

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

-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".

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