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!
źródło
after_switch_theme
robi dokładnie to, co zamierzałem tutaj. Uruchamia się po przełączeniu motywu na motyw. Jedno z wymienionych poniżej rozwiązań wykorzystujeswitch_theme
. Nie przynosi to pożądanych rezultatów, ponieważ dzieje się to dopiero po odejściu od tematu. Odwołaj się do tego komentarza TracOdpowiedzi:
ROZWIĄZANIE:
after_switch_theme
robi dokładnie to, co zamierzałem tutaj. Uruchamia się po przełączeniu motywu na motyw. Jedno z wymienionych poniżej rozwiązań wykorzystujeswitch_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
źródło
after_setup_theme
Dział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_theme
oznacza 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 .
źródło
init !== activation
. Zwykle wywołujesz__construct()
funkcję w php również jakoinit
funkcję. Oznacza to: Zainicjuj instancję.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_theme
haka.Zgodnie z komentarzami OP i połączonym biletem trac -
after_switch_theme
jest 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 .Podobnie dodanie oddzwaniania
switch_theme
będzie wywoływane tylko wtedy, gdy Twój motyw zostanie dezaktywowany.źródło
switch_theme
działało tylko po dezaktywacji motywu. Jednakafter_switch_theme
działało idealnie.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 .
źródło
Najlepszym rozwiązaniem byłoby teraz użycie
switch_theme
haka i filtrowanie przekazanego argumentu „$ theme”, aby sprawdzić, czy jest to bieżący, a jeśli nie, to zwrócić;źródło