Hook activare temă WordPress

16 feb. 2013, 18:59:29
Vizualizări: 20.6K
Voturi: 16

Ș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?

0
Toate răspunsurile la întrebare 6
0
47

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

27 sept. 2014 22:33:31
1

Cu funcționalitățile de previzualizare a temelor, este puțin probabil să existe vreodată un hook pentru activarea temelor, deoarece acestea trebuie să funcționeze chiar și fără a fi "activate".

16 feb. 2013 19:21:22
Comentarii

Bun punct @mark-kaplun

wesamly wesamly
16 oct. 2016 15:26:46
3

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

18 sept. 2017 23:59:37
Comentarii

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

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

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ă

Sagive Sagive
28 mai 2020 16:56:39

Sigur, asta o face mai ușoară

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

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');
21 iul. 2023 21:52:49
0

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

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

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

TheWebs TheWebs
16 feb. 2013 19:11:39

poți lucra cu $_GET['previewed'] și $_GET['theme']

birgire birgire
16 feb. 2013 19:20:32

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

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

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']

birgire birgire
16 feb. 2013 19:23:46

Acesta este un răspuns prost pe care l-am postat acum mult timp, te rog să-l eviți, nu se pot elimina cele acceptate, mulțumesc

birgire birgire
4 mar. 2022 21:02:08