Cześć @Sruly :
Prawie odpowiedziałeś na swoje pytanie, ale rozwinę trochę.
Haki do akcji
Haki działań są przeznaczone do użycia, gdy rdzeń WordPress, wtyczka lub motyw daje możliwość wstawienia kodu w określonym momencie i wykonania jednej lub więcej z następujących czynności:
- Użyj,
echo
aby wstrzyknąć część HTML lub inną zawartość do bufora odpowiedzi,
- Zmodyfikuj stan zmiennej globalnej dla jednej lub więcej zmiennych i / lub
- Zmodyfikuj parametry przekazane do funkcji przechwytującej (zakładając, że przechwytywanie zostało wywołane przez
do_action_ref_array()
zamiast, do_action()
ponieważ to ostatnie nie obsługuje przekazywania zmiennych przez odniesienie ).
Filtruj haki
Haki filtru zachowują się bardzo podobnie do haków akcji, ale ich przeznaczeniem jest uzyskanie wartości i potencjalnie zwrócenie zmodyfikowanej wersji wartości. Hak filtrujący może być również użyty tak samo, jak hak akcji, tj. Do zmodyfikowania zmiennej globalnej lub wygenerowania kodu HTML, przy założeniu, że to właśnie powinieneś zrobić po wywołaniu haka. Jedną z rzeczy, która jest bardzo ważna w Filtrach, których nie musisz się martwić dzięki Action Hooks, jest to, że osoba korzystająca z Filtru musi zwrócić (zmodyfikowaną wersję) pierwszy parametr, który został przekazany. Częstym błędem początkującego jest zapomnienie o zwróceniu tej wartości!
Używanie dodatkowych parametrów w celu zapewnienia kontekstu w hakach filtrów
Nawiasem mówiąc, czułem, że haki filtrów były spętane we wcześniejszych wersjach WordPressa, ponieważ otrzymywałyby tylko jeden parametr; tzn. otrzymaliby wartość do modyfikacji, ale nie mieliby 2 lub 3 parametrów, aby zapewnić kontekst. Ostatnio i pozytywnie wydaje się, że zespół podstawowy WordPress z radością (dla mnie) dodaje dodatkowe parametry do Filtrów, abyś mógł odkryć więcej kontekstu. Dobrym przykładem jest posts_where
haczyk; Wierzę, że kilka wersji wstecz zaakceptowało tylko jeden parametr będący klasą SQL „ bieżącego” zapytania w bieżącym zapytaniu, ale teraz akceptuje zarówno klauzulę where, jak i odwołanie do bieżącej instancji WP_Query
klasy wywołującej hook.
Więc jaka jest prawdziwa różnica?
W rzeczywistości Haczyki Filtrujące są w zasadzie nadzbiorem Haków Akcji. Ten pierwszy może zrobić wszystko, co drugi może zrobić, a nieco więcej, choć deweloper nie ma obowiązku zwracania wartości za pomocą haka do akcji, który robi za pomocą haka do filtrowania.
Udzielanie wskazówek i intencji telegraficznych
Ale to chyba nie jest ważne. Myślę, że ważne jest to, że deweloper decydujący się na użycie haka akcji vs. haka filtru lub odwrotnie, telegrafuje swoje zamiary, dając tym samym wskazówki twórcy lub twórcy wtyczki, którzy mogą używać haka. W gruncie rzeczy mówią albo: „Zadzwonię do ciebie, zrób wszystko, co musisz zrobić” LUB „Przekażę ci tę wartość, aby ją zmodyfikować, ale upewnij się, że ją oddasz ”.
Tak więc ostatecznie uważam, że wskazówki zapewniane przez wybór rodzaju haka są prawdziwą wartością leżącą u podstaw tego rozróżnienia . W każdym razie IMO.
Mam nadzieję że to pomoże!
Jeśli spojrzysz na źródło
add_action()
funkcji podstawowej, jest to po prostu opakowanieadd_filter()
funkcji ...A jeśli spojrzysz na funkcję
do_action()
podstawową, jest ona bardzo podobna doapply_filters()
funkcji podstawowej, z jedną bardzo istotną różnicą: nie zwraca wartości.Co to znaczy? akcje są jak filtry, tyle że akcja nie zwraca wartości, więc nie można modyfikować danych. Pokazuje, że utworzenie mechanizmu działania WordPress było proste, po prostu kopiując mechanizm filtrujący i nie zwracając wartości. Zasadniczo wszystko, co możesz zrobić z akcją, to po prostu wykonać funkcję bez zmiany jakiejś wartości.
źródło
Krótko mówiąc.
Zaktualizowano: Możemy rozszerzyć dowolną wtyczkę, która korzysta z akcji i filtrów, bez modyfikowania tam kodu. Dodając filtry i działania w naszym własnym motywie lub wtyczce.
Jak używać?
Akcja:
Sprawdź poniżej proste przykłady w swoim
functions.php
pliku motywu .Powyżej programu wydrukuj wynik:
[UWAGA: Tutaj test () po prostu wywołuje funkcję. I uruchom funkcję wywołania zwrotnego „test”.]
Powyżej programu wydrukuj wynik:
[UWAGA: Tutaj
do_action('test')
działa jak funkcja wywołania. I uruchom funkcję zwrotną „test1”.]Powyżej programu wydrukuj wynik:
[UWAGA: Tutaj
do_action('test')
działa jak funkcja wywołania. I wykonuj funkcje zwrotne na swoich priorytetach.Funkcja oddzwaniania „test1” ma priorytet 2, a „test2” ma priorytet 1.]
Jeśli priorytety ulegną zmianie, np. „Test1” z priorytetem 1 i „test2” z priorytetem 2, wynikiem będzie:
functions.php
Powyżej programu wydrukuj wynik:
Teraz utwórz przykładową wtyczkę, aby sprawdzić, jak działa programista zewnętrzny.
/wp-content/plugins/
katalogu.Teraz aktywuj naszą Prostą wtyczkę z pulpitu administratora WordPress.
Idź do wtyczki menu i aktywuj ją.
Po aktywacji wtyczki nad programem wydrukuj wyjście:
[UWAGA: Jeśli dodamy priorytet naszej akcji wtyczki od 1 do 9, to wydrukuje wynik w następujący sposób:
Ponieważ WordPress bierze pod uwagę
10 priority by default
wszystkie dodane działania.]Filtry
Sprawdź poniższe przykłady:
Prosty przykład PHP:
Powyżej programu wydrukuj wynik:
Powyżej programu wydrukuj wynik:
Tutaj, dodaliśmy filtr
my_filter_name
i zmienić istniejące wyjściearray( 'one', 'two' )
zearray( 'three', 'four' )
bez zmieniania plików theme / plugin.źródło