po_setup_theme zawsze działa


11

Przygotowuję motyw potomny dla niektórych członków mojego wydziału i jako część tego motywu chciałbym, aby garść wtyczek była aktywowana w momencie aktywacji motywu. Oczywiście użyłem akcji after_setup_theme i wywołałem funkcję konfiguracji. Działa świetnie, z wyjątkiem tego, że działa na KAŻDYM żądaniu (administratora i innych). Udowodniłem to, dodając to na końcu funkcji konfiguracji:

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

W rezultacie otrzymuję alert javascript dla każdego żądania administratora i każdego żądania frontonu (mam konfigurację sieci, więc oczywiście w witrynach, w których ten motyw nie jest aktywny, nie działa funkcja)

Pytanie brzmi, czy to błąd? Czy robię coś złego? Oto pełny kod, którego używam:

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

Wszelkie informacje będą mile widziane!


ROZWIĄZANIE: after_switch_themerobi dokładnie to, co zamierzałem tutaj. Uruchamia się po przełączeniu motywu na motyw. Jedno z wymienionych poniżej rozwiązań wykorzystuje switch_theme. Nie przynosi to pożądanych rezultatów, ponieważ dzieje się to dopiero po odejściu od tematu. Odwołaj się do tego komentarza Trac
Aaron Wagner,

proszę zamieścić to jako odpowiedź , a nie jako komentarz do pytania. :)
Chip Bennett

2
Przeprosiny. Nie pozwoliłbym sobie na to jeszcze. Dodaję to za chwilę.
Aaron Wagner

Odpowiedzi:


8

ROZWIĄZANIE: after_switch_themerobi dokładnie to, co zamierzałem tutaj. Uruchamia się po przełączeniu motywu na motyw. Jedno z wymienionych poniżej rozwiązań wykorzystuje switch_theme. Nie przynosi to pożądanych rezultatów, ponieważ dzieje się to dopiero po odejściu od tematu.

Oto artykuł, który znalazłem jako odniesienie: http://core.trac.wordpress.org/ticket/7795#comment:29

Oto mój zmodyfikowany kod

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

after_setup_themeDziałanie jest przeznaczone do ognia na każdym obciążeniu WordPress. Jest to po prostu część procesu, w trakcie którego WordPress wywołuje system szablonów, określa różne parametry konfiguracji motywu, a następnie kontynuuje przetwarzanie, takie jak określenie właściwego szablonu do wyświetlenia itp.

Innymi słowy, after_setup_themeoznacza punkt, w którym WordPress konfiguruje bieżący motyw, a nie punkt, w którym administrator aktywuje i / lub konfiguruje bieżący motyw.

To, czego szukasz, to hak aktywacyjny Theme , który obecnie nie jest dostępny, ale jest w trakcie rozważania / rozwoju .


Link do Kodeksu jest wtedy strasznie mylący. Mówi: „Ten hak jest wywoływany podczas inicjowania motywów”. Dla mnie oznacza to, że hak powinien zostać wywołany, gdy zostanie aktywowany. Rozumiem jednak, co mówisz. Strasznie wprowadzające w błąd.
Aaron Wagner

5
init !== activation. Zwykle wywołujesz __construct()funkcję w php również jako initfunkcję. Oznacza to: Zainicjuj instancję.
kaiser

Bilet trac ma 7 lat i wydaje się, że nie zostanie naprawiony!
numediaweb

4

Niestety nie ma haka do aktywacji motywu. Jednak to pytanie zapewnia obejście tego problemu .

Po prostu użyj „haka aktywacyjnego motywu”, aby aktywować wtyczki.

Lepszym rozwiązaniem, w tym samym stylu, jest to . Oba zasadniczo używają switch_themehaka.


Zgodnie z komentarzami OP i połączonym biletem trac - after_switch_themejest wymagany hak.

To przekazuje nazwę starego motywu jako argument. Jeśli jednak jest to w twoim functions.php(które powinno być ...) oddzwanianie będzie uruchamiane tylko wtedy, gdy twój motyw jest aktywowany .

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

Podobnie dodanie oddzwaniania switch_themebędzie wywoływane tylko wtedy, gdy Twój motyw zostanie dezaktywowany.

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

Żadna z tych opcji nie działała dla mnie. switch_themedziałało tylko po dezaktywacji motywu. Jednak after_switch_themedziałało idealnie.
Aaron Wagner,

1
zaktualizowana odpowiedź :)
Stephen Harris

wydaje się, że switch_theme już nie działa. Myślę, że dzieje się tak ze względu na zmiany w aktywacji 3.4. Przynajmniej mi to nie działa.
Jake,

after_switch_theme działa idealnie. To powinna być zaakceptowana odpowiedź. Używam WP 3.5
Ardee Aram

0

Lepszym rozwiązaniem może być użycie skryptu aktywacyjnego wtyczki Thomasa Griffina . To zachęci użytkowników do zainstalowania wybranych wtyczek, gdy motyw będzie używany. Myślę, że to świetny sposób, aby oddzielić wtyczkę od motywu i nadal z niej korzystać.

W ramach motywu sprawdź, czy wtyczka jest aktywna przed użyciem jej funkcji. Umożliwi to użytkownikom większy wybór i kontrolę.

Za pomocą Knapsack możesz łatwo skonfigurować skrypt aktywacyjny .



0

Najlepszym rozwiązaniem byłoby teraz użycie switch_themehaka i filtrowanie przekazanego argumentu „$ theme”, aby sprawdzić, czy jest to bieżący, a jeśli nie, to zwrócić;

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

   // Your code here
}

add_action('switch_theme', 'nw_update_network');
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.