Jak faktycznie działają filtry i haki w WordPress?
Pytam o coś zaawansowanego. Jak to jest zaimplementowane w PHP? Na przykład, w jaki sposób zbiera wszystkie haki z różnych wtyczek i „dołącza” je do haków rdzenia itp.
O ile wiem, w php nie ma żadnych „haków” ani „filtrów”, są też funkcje. Wordpress ma specjalne funkcje, które przed ich wykonaniem wykorzystują wywołanie zwrotne innych funkcji.
Ogólnie rzecz biorąc, istnieje kilka globali (co jeszcze w świecie WordPress):
global $wp_filter, $wp_actions, $wp_current_filter, $merged_filters;
Pierwszy $wp_filterto globalny, Arrayktóry przechowuje wszystkie nazwy filtrów jako podcienie. Każda z tych podrzędnych zawiera następnie jeszcze więcej podrzędnych, które są wywołaniami zwrotnymi przywołanymi w tablicy priorytetowej.
Krótki w szczegółach
Kiedy więc wywoływana jest funkcja wykonywania , WordPress przeszukuje tablice globałów w poszukiwaniu kluczy o tej nazwie. Następnie dołączone wywołania zwrotne są wykonywane priorytet po priorytecie. Jedyne, co dzieje się z przodu, to wywołania zwrotne dołączone do allfiltra.
Po dodaniu wywołania zwrotnego za pomocą add_actionlub add_filter, WordPress najpierw oblicza „unikalny” identyfikator, aby nie zastępować już dołączonych wywołań zwrotnych.
Jak widać, główną podrzędną tablicą jest $tag(lub nazwa akcji / filtru), wtedy wszystko jest przywoływane pod określonym priorytetem, a następnie „kluczowy” ciąg zwrotny / identyfikator zostaje użyty jako klucz.
Później, gdy wywoływany jest filtr - dzieje się to z nazwą $tag/ action- / filter-name - tablica jest przeszukiwana i wywoływane są wywołania zwrotne. Podczas używania call_user_func_arraynie ma znaczenia, ile argumentów jest dołączonych. WordPress sam to rozwiązuje.
nie zapominaj, że podczas przechodzenia przez wywołania zwrotne, zleca wykonanie wielu wywołań zwrotnych na tym samym haku, używając ich „priorytetu”, który jest ustawiony (opcjonalnie) za pomocą add_action () i apply_filters () i domyślnie ustawiony na 10.
Tom Auger
1
@TomAuger Prosimy dodawać wszelkie dodatkowe uwagi i zmiany do odpowiedzi.
kaiser
5
Haki są zawarte zarówno w podstawowych plikach WordPress, jak i w niektórych plikach motywów nadrzędnych. Umożliwiają zaczepienie zawartości w określonej lokalizacji w pliku.
Przykładem jest hak wp_head w WordPress. Możesz użyć tego haka w motywie podrzędnym, aby dodać treść w tej lokalizacji „
Niektóre motywy premium zawierają również haczyki akcji, których można użyć w motywie potomnym, aby zrobić to samo. Oto mapa wizualna, która zawiera wszystkie haczyki akcji i pozycję, w której wyprowadzają twoją treść w ramach motywu Genesis.
Filtry pozwalają modyfikować dane wyjściowe istniejącej funkcji i są zawarte zarówno w podstawowych plikach WordPress, jak i w niektórych nadrzędnych ramach tematycznych, takich jak Genesis.
Oto lista filtrów, których możesz używać z Genesis Design Framework
function the_excerpt(){
echo apply_filters('the_excerpt', get_the_excerpt());}
Możesz również użyć haczyków i filtrów we wtyczkach, aby zrobić dokładnie to samo, a kod nie zostanie utracony podczas aktualizacji motywu nadrzędnego lub WordPressa.
Zasadniczo zaczepy i filtry umożliwiają dostosowanie i modyfikację zarówno WordPress, jak i motywu nadrzędnego bez edytowania podstawowych plików WordPress lub plików motywu nadrzędnego.
Znacznie łatwiej jest dostosować motyw podrzędny, gdy struktura motywu nadrzędnego zawiera zaczepy i filtry, ponieważ nigdy nie trzeba edytować plików szablonów motywów nadrzędnych. W ten sposób możesz również bezpiecznie zmieniać motywy.
Jest to świetny ogólny przegląd haków i filtrów, ale obawiam się, że całkowicie pomija się pytanie OP, które dotyczy wewnętrznych sposobów działania haków i tego, jak WordPress je tworzy, przechowuje i przetwarza. Świetna odpowiedź; prawdopodobnie powinieneś link do swojego samouczka na stronach WP.
Tom Auger
Ok usunę to. Mój zły jak powinienem był lepiej przeczytać pytanie, ale pomyślałem, że odpowiedzi już udzielone byłyby łatwiejsze dla początkujących, gdyby znali podstawowe.
Brad Dalton,
2
Brad, cofnąłem to, ponieważ myślę, że przydałoby się też mieć te informacje tutaj. Jeśli się nie zgadzasz, po prostu wspomnij o mnie / pinguj tutaj, a usunę go ponownie.
Odpowiedzi:
Przegląd
Zasadniczo „ Plugin API ”, który przywołuje filtry i hooki, składa się z następujących funkcji:
apply_filters()
- wykonaćdo_action
- wykonaćapply_filters_ref_array()
- wykonaćdo_action_ref_array()
- wykonaćadd_filter()
- dodaj do stosuadd_action()
- dodaj do stosuPodstawowe elementy wewnętrzne
Ogólnie rzecz biorąc, istnieje kilka globali (co jeszcze w świecie WordPress):
Pierwszy
$wp_filter
to globalny,Array
który przechowuje wszystkie nazwy filtrów jako podcienie. Każda z tych podrzędnych zawiera następnie jeszcze więcej podrzędnych, które są wywołaniami zwrotnymi przywołanymi w tablicy priorytetowej.Krótki w szczegółach
Kiedy więc wywoływana jest funkcja wykonywania , WordPress przeszukuje tablice globałów w poszukiwaniu kluczy o tej nazwie. Następnie dołączone wywołania zwrotne są wykonywane priorytet po priorytecie. Jedyne, co dzieje się z przodu, to wywołania zwrotne dołączone do
all
filtra.Po dodaniu wywołania zwrotnego za pomocą
add_action
lubadd_filter
, WordPress najpierw oblicza „unikalny” identyfikator, aby nie zastępować już dołączonych wywołań zwrotnych.Następnie dodaje oddzwonienie do
global $wp_filter
stosu:Jak widać, główną podrzędną tablicą jest
$tag
(lub nazwa akcji / filtru), wtedy wszystko jest przywoływane pod określonym priorytetem, a następnie „kluczowy” ciąg zwrotny / identyfikator zostaje użyty jako klucz.Później, gdy wywoływany jest filtr - dzieje się to z nazwą
$tag
/ action- / filter-name - tablica jest przeszukiwana i wywoływane są wywołania zwrotne. Podczas używaniacall_user_func_array
nie ma znaczenia, ile argumentów jest dołączonych. WordPress sam to rozwiązuje.źródło
Haki są zawarte zarówno w podstawowych plikach WordPress, jak i w niektórych plikach motywów nadrzędnych. Umożliwiają zaczepienie zawartości w określonej lokalizacji w pliku.
Przykładem jest hak wp_head w WordPress. Możesz użyć tego haka w motywie podrzędnym, aby dodać treść w tej lokalizacji „
Przykład:
Niektóre motywy premium zawierają również haczyki akcji, których można użyć w motywie potomnym, aby zrobić to samo. Oto mapa wizualna, która zawiera wszystkie haczyki akcji i pozycję, w której wyprowadzają twoją treść w ramach motywu Genesis.
Przykład:
Oto jak wygląda hak, jeśli otworzysz plik header.php w strukturze motywu Genesis:
Oto lista haków WordPress, których możesz używać na wiele sposobów.
Filtry pozwalają modyfikować dane wyjściowe istniejącej funkcji i są zawarte zarówno w podstawowych plikach WordPress, jak i w niektórych nadrzędnych ramach tematycznych, takich jak Genesis.
Oto lista filtrów, których możesz używać z Genesis Design Framework
Oto lista filtrów zawartych w WordPress
Oto przykład, w jaki sposób można użyć filtra w ramach motywu, takich jak Genesis:
Powyższy kod może być użyty w motywie podrzędnym do modyfikacji tekstu autora w komentarzach. Działa w każdym temacie.
Oto kolejny przykład, który dostosowuje długość fragmentów do 50 słów:
Znajdziesz funkcję the_excerpt () w pliku wp-include / post-template.php.
Oto jak to wygląda:
Możesz również użyć haczyków i filtrów we wtyczkach, aby zrobić dokładnie to samo, a kod nie zostanie utracony podczas aktualizacji motywu nadrzędnego lub WordPressa.
Zasadniczo zaczepy i filtry umożliwiają dostosowanie i modyfikację zarówno WordPress, jak i motywu nadrzędnego bez edytowania podstawowych plików WordPress lub plików motywu nadrzędnego.
Znacznie łatwiej jest dostosować motyw podrzędny, gdy struktura motywu nadrzędnego zawiera zaczepy i filtry, ponieważ nigdy nie trzeba edytować plików szablonów motywów nadrzędnych. W ten sposób możesz również bezpiecznie zmieniać motywy.
źródło