Hook activare temă WordPress
Știu numeroasele trucuri pentru a verifica dacă o anumită temă este activată, am căutat pe internet. Nu sunt în căutarea unui cod copiat și lipit. Ceea ce caut însă este dacă versiunile 3.3-3.5 au lansat o nouă funcție care face ceva la theme_init, am văzut un fel de hook, dar nu-mi amintesc unde, în codex, care se ocupă cu executarea unor acțiuni după ce o temă a fost inițializată.
Știe cineva?
Pentru oricine ajunge la această întrebare; există un acțiune la care vă puteți conecta (adăugat în versiunea 3.3.0) care este declanșată doar la activarea unui nou temă: after_switch_theme
add_action('after_switch_theme', 'mytheme_setup_options');
function mytheme_setup_options () {
//făcând ceva...
}
http://codex.wordpress.org/Plugin_API/Action_Reference/after_switch_theme
Pentru a face ceva la dezactivarea unei teme puteți folosi acțiunea înrudită: switch_theme

După ce am încercat metoda lui @sleepingkiwi, am întâmpinat o problemă. Un client ar putea încerca o temă diferită (chiar și doar pentru o clipă), iar acest lucru ar putea crea o problemă datorită faptului că hook-ul "on theme activation" pe care l-am creat a rulat de două ori.
Cea mai bună metodă este utilizarea lui after_switch_theme
împreună cu update_option
din WordPress pentru a salva și verifica ulterior o notificare de activare, făcând astfel metoda infailibilă.
Exemplu:
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' );
// EXECUTĂ ACȚIUNILE LA ACTIVAREA TEMEI AICI
}
}
Sper că acest lucru vă ajută.

Nu ar trebui să fie așa, codex-ul specifică că se declanșează doar pentru tema curentă: Funcțiile temei atașate de acest hook sunt declanșate doar în tema (și/sau tema copil) care este activată.
codex

Dar asta e bine, nu-i așa? avem nevoie și să facem niște curățenie după ce tema este dezactivată - dar în general, aș crede că e bine pentru că e un lucru legat de temă

Folosesc acest cod pentru a crea hook-urile register_vuewp_theme
și unregister_vuewp_theme
, astfel încât să pot atașa funcții acestor hook-uri cu ușurință.
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');

Action hook-ul after_switch_theme poate eșua uneori deoarece se declanșează doar dacă vechea temă încă există. Acest lucru este menționat în codex.
Puteți verifica direct în wp-includes/theme.php în funcția check_theme_switched() unde este adăugat action hook-ul. Veți observa că action hook-ul "after_switch_theme" se află în condiția if ( $old_theme->exists() ) {....}.
Dacă doriți să vă asigurați că hook-ul se declanșează de fiecare dată când o temă este activată, indiferent dacă vechea temă mai există, puteți crea propriul hook personalizat prin interceptarea modificării opțiunii "stylesheet". De fiecare dată când o temă este activată, această opțiune stochează numele noii teme active. Deci:
add_action( 'update_option_stylesheet','my_theme_activation_hook',20,3 );
add_action( 'update_site_option_stylesheet','my_theme_activation_hook',20,3 ); //Pentru instalări multisite
function my_theme_activation_hook( $old_value, $value, $option ){
//Adaugă un action hook după activarea temei, indiferent dacă vechea temă mai există
do_action( 'my_after_theme_activation');
}
Apoi puteți folosi action hook-ul personalizat "my_after_theme_activation" sau orice alt nume doriți să-i dați.
Această metodă nu este perfectă deoarece un plugin ar putea actualiza opțiunea "stylesheet" fără o activare reală a temei. Nu văd de ce ar face acest lucru, dar este permis și nu se știe niciodată. Așadar, aș ține cont de acest aspect. Folosiți-o dacă nu este o problemă pentru dvs. să se declanșeze și atunci când o nouă temă nu este activată cu adevărat, ci un plugin a modificat doar opțiunea "stylesheet".
De asemenea, puteți intercepta direct modificarea opțiunii "theme_switched" în loc de "stylesheet". Nu am testat acest lucru, dar uitându-mă la cod, se pare că se declanșează de două ori când activați o nouă temă. Prima dată pentru a salva stiloul vechii teme și a doua oară pentru a salva valoarea "false".

Poate că cauți hook-ul after_setup_theme
:
http://codex.wordpress.org/Plugin_API/Action_Reference/after_setup_theme

pot folosi aceeași funcție pentru a face ceva după dezactivare? Exemplul pare să sugereze asta, dar sunt curios

-1 deoarece acest hook este declanșat la fiecare inițializare WP. Este declanșat după includerea fișierului functions.php al temei, deci nu este un hook de "activare".

da, este adevărat, dar soluția pentru aceasta este menționată pe pagina Codex, să verifici parametrii GET de mai sus sau $_GET['activated']
