✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Przewodnik: Wszystko o hakach w WordPress

34

Powiedziano ci kiedyś, że rozwiązanie twojego problemu polega na tym, że musisz „zaczepić się" na czymś, aby zrobić coś, co chcesz lub użyć, add_filternie rozumiejąc, dlaczego to psuje? Haki stanowią podstawę WordPressa i zapewniają motywy i wtyczki umożliwiające interakcję lub zmodyfikuj kod.W tym poście wyjaśnimy czym są hooki, jak działają i jak możemy ich używać.

Czym są haki?

Gdy WordPress przechodzi przez swój kod (od początku ładowania klas, ładowania wtyczek, ładowania motywu, tworzenia zapytania dla bieżącego żądania i wreszcie renderowania kodu HTML), przechodzi przez kilka „punktów kontrolnych”; haki. Po napotkaniu haka WordPress zatrzyma to, co robi – i sprawdzi, czy są jakieś funkcje (w motywie, wtyczce lub samym WordPressie), które są zarejestrowane do uruchamiania w tym haku. Jeśli tak, WordPress uruchomi wszystkie te funkcje, a następnie kontynuuje od miejsca, w którym zostało przerwane.

Dzięki temu wtyczki, motywy i sam WordPress mogą „podczepić się” do określonych punktów, aby dodać np. arkusze stylów w <head>tagu motywu, zmodyfikować sposób, w jaki WordPress wysyła zapytania do postów, lub po prostu zmienić treść posta, jeśli jest to pożądane.

Istnieją dwa rodzaje haczyków; działania i filtry. Działają bardzo podobnie, ale z jednym wyjątkiem, któremu przyjrzymy się bliżej poniżej.

Akcje i filtry

Aby podpiąć się pod akcję lub filtr, musisz zdefiniować, którego podpięcia (poprzez jego nazwę) chcesz użyć, oraz zdefiniować wywołanie zwrotne – czyli nazwę funkcji, którą chcesz uruchomić. W większości przypadków podpięcia dostarczają parametry lub zmienne, które są istotne dla podpięcia.

Akcje to po prostu „punkty kontrolne” w wykonywaniu WordPressa, w których możesz wykonać zadanie lub coś powtórzyć. W niektórych rzadkich przypadkach można zmodyfikować obiekt (podany w parametrach), aby wszystkie kolejne wykonania działały z tym zmienionym obiektem.

Filtry służą do zmiany zmiennej lub wyjścia. Wszystkie hooki filtrów dostarczają zmienną, którą możesz zmienić jako pierwszy parametr, i pozwalają na jej modyfikację lub zwrócenie czegoś innego.

WordPress obsługuje wiele haczyków, ale możesz stworzyć własne w swojej wtyczce lub motywie. Pozwala to programistom rozszerzać i modyfikować Twój kod; na przykład modyfikowanie wtyczki za pomocą motywu lub modyfikowanie motywu nadrzędnego za pomocą motywu potomnego.

Wiele funkcji WordPressa, zwykle używanych do drukowania postów, to także filtry lub akcje. Na przykład funkcja the_title()wypisuje tytuł posta, ale jest też filtrem.

Przyjrzyjmy się, jak w praktyce się do nich podłączamy.

Podczepianie się do działań

Aby podpiąć się pod akcję, używasz metody add_action(). Jako minimum wymaga dwóch parametrów; nazwa haka i callback; nazwa funkcji, którą chcesz uruchomić. Opcjonalnie możesz podać priorytet jako trzeci parametr i zdefiniować liczbę argumentów, które zostaną przekazane do funkcji zwrotnej. Przyjrzymy się dwóm opcjonalnym parametrom później, ale na razie oto przykład add_action:

add_action('init', 'my_function_name'); function my_function_name() { // Do your stuff }

Pierwszy parametr add_actionto nazwa akcji; w tym przypadku init, co jest dość powszechnym hakiem WordPressa, który ma miejsce podczas inicjowania. Drugim parametrem jest twoje wywołanie zwrotne, w tym przypadku nazwa funkcji, którą chcemy uruchomić. Następnie wystarczy zdefiniować funkcję o tej nazwie i dodać do niej swój kod.

Możesz także użyć funkcji anonimowych, w których definiujesz funkcję wewnątrz add_actionzamiast podawać nazwę funkcji, tak jak na przykład;

add_action('init', function() { // Do your stuff });

Wielu programistów preferuje tę metodę, ponieważ zapobiega to ryzyku przedefiniowania funkcji PHP o tej samej nazwie.

Jeśli potrzebujesz uruchomić funkcję zdefiniowaną w klasie PHP, musisz podać tablicę jako parametr wywołania zwrotnego; gdzie pierwszy element to obiekt klasy, a drugi to nazwa funkcji:

class MyClass { public function __construct() { add_action('init', [$this, 'myFunctionName']); }   public function myFunctionName() { // Do your stuff } }

Podłączanie do filtrów

Aby podpiąć się pod filtr, użyj funkcji add_filter(). Podobnie jak w przypadku powyższych akcji, pierwszym parametrem jest nazwa filtra, a drugim callback. Opcjonalnie możesz podać priorytet jako trzeci parametr i liczbę argumentów jako czwarty. Oto przykład add_filter:

add_filter('the_title', 'my_function_name'); function my_function_name($title) { // Do your stuff return $title; }

W powyższym przykładzie podpinamy się do filtra the_title(który wyświetla tytuł posta) i mówi WordPressowi, aby uruchomił naszą funkcję. Wszystkie filtry zawsze podadzą jeden argument; zmienna do zmiany. W mojej funkcji nazwałem go, $titleponieważ wiem, że zawiera tytuł posta. Wewnątrz funkcji mogę ją zmodyfikować lub całkowicie nadpisać zmienną. Należy pamiętać, że w filtrach zawsze trzeba zwracać zmienną. Jeśli nie zwrócisz czegoś w swojej funkcji zwrotnej, zmienna zostanie opróżniona. Gdybym pominął instrukcję return w powyższym przykładzie, żadne tytuły postów nigdy nie pojawiłyby się nigdzie.

Argument zmiennej i zasada zwracania czegoś w funkcji zwrotnej to praktycznie jedyna różnica między filtrami a akcjami. Wszystko inne działa tak samo. Możesz postępować zgodnie z przykładami dla anonimowych funkcji i klas pokazanymi dla akcji powyżej dla filtrów, a także z opcjonalnymi parametrami priorytet i liczba argumentów; którym przyjrzymy się dalej.

Priorytet

Trzeci (opcjonalny) parametr do add_actioni add_filterjest liczbą całkowitą, która definiuje priorytet funkcji zwrotnej. Jest to przydatne w przypadkach, gdy istnieje wiele funkcji (niekoniecznie od Ciebie w motywie lub wtyczce, pamiętaj, że sam WordPress używa własnych hooków) i musisz zdecydować, którą z nich uruchomić najpierw.

Jeśli nie ma podanego priorytetu, wartością domyślną jest 10. Im niższy priorytet, tym wcześniej jest uruchamiany, a wyższy priorytet, tym później jest uruchamiany. Nie możesz podać negatywnego priorytetu.

Wyobraź sobie wiele funkcji wywołań zwrotnych zarejestrowanych w usłudze init. Jeśli nie podano priorytetu dla wielu wywołań zwrotnych, WordPress uruchomi je w kolejności, w jakiej zostały znalezione (na przykład w functions.phpkodzie wtyczki).

add_action('init', 'my_function_name'); add_action('init', 'my_second_function_name'); add_action('init', 'my_third_function_name', 12); add_action('init', 'my_fourth_function_name', 1);

To byłaby kolejność, w jakiej WordPress będzie uruchamiał powyższe wywołania zwrotne:

  1. my_fourth_function_name(priorytet 1)
  2. my_function_name(priorytet 10)
  3. my_second_function_name(priorytet 10, ale pojawia się później w kodzie)
  4. my_third_function_name(priorytet 12)

Liczba argumentów

Zazwyczaj hooki dostarczają dodatkowych danych, które są istotne i przydatne dla funkcji zwrotnych. Na przykład akcja save_post(uruchamiana za każdym razem, gdy post jest aktualizowany) dostarcza dwóch możliwych argumentów; identyfikator posta i obiekt postu. Są one przydatne w przypadku operacji, które zwykle trzeba uruchamiać w tym zaczepie (na przykład, jeśli chcesz zapisać meta posta, potrzebujesz identyfikatora posta).

Jeśli nie podano liczby argumentów dla akcji lub filtru, domyślnie jest to 1. Dlatego nie musisz definiować 1 on add_filter, aby uzyskać dostęp do zmiennej, do której podpięty jest filtr. Jednak akcje nie mogą przekazywać żadnych argumentów, mimo że liczba argumentów jest domyślnie ustawiona na 1.

Spójrzmy na przykład definiowania liczby argumentów i sposobu, w jaki uzyskujemy do nich dostęp w naszej funkcji zwrotnej:

add_action('save_post', 'my_function_name', 10, 2); function my_function_name($post_id, $post) { // Do your stuff }

W powyższym przykładzie mówimy WordPressowi, aby przekazał dwa argumenty do naszej funkcji zwrotnej. Pamiętaj, że musimy zdefiniować priorytet jako trzeci parametr, więc zwykle definiujemy wartość domyślną, która wynosi 10. Jeśli chodzi o naszą funkcję zwrotną, możemy teraz zdefiniować tę samą liczbę argumentów, o którą prosiliśmy, w powyższym przykładzie było 2.

Gdybyśmy w powyższym przykładzie ustawili liczbę argumentów na 1, wypełniony byłby tylko pierwszy argument w naszej funkcji zwrotnej. Drugi, $post, byłby niezdefiniowany.

Co jeśli potrzebujemy danych, które nie zostały przekazane w haczyku?

To zależy wyłącznie od programisty, który stworzył hak, aby zdefiniować, jakie argumenty mogą zostać przekazane. Oznacza to, że nie możesz po prostu wymusić, jakich argumentów chcesz lub potrzebujesz w swoim add_actionlub add_filter. Na szczęście w większości przypadków mamy alternatywy, aby uzyskać potrzebne nam zmienne. Jeśli podpinasz się do akcji lub filtru, w którym wiesz, że pewne zmienne globalne powinny być zdefiniowane, możesz uzyskać dostęp do tych zmiennych globalnych w funkcji zwrotnej. Ponadto WordPress ma całą gamę tagów warunkowych, których możesz użyć w swoich funkcjach zahaczonych (z wyjątkiem bardzo wczesnych hooków, które występują zanim WordPress zdefiniuje te tagi warunkowe)

Spójrzmy na przykład dostępu do zmiennych globalnych. Filtr the_titledostarcza identyfikator postu jako opcjonalny argument, do którego możemy uzyskać dostęp, definiując go jako akceptowalny argument;

add_filter('the_title', 'my_function_name', 10, 2); function my_function_name($title, $post_id) { if ($post_id == 1) { return 'First post ever!'; } return $title; }

Ten sam wynik możemy jednak osiągnąć poprzez;

Jeśli wiesz, że zmienna globalna jest zdefiniowana przez punkt uruchomienia podpięcia, możesz zdefiniować je jako globalne w funkcji zwrotnej i uzyskać dostęp do danych z tego miejsca. Na przykład zdefiniowanie global $wp_queryw powyższym przykładzie dałoby również dostęp do pełnego obiektu wp_query wewnątrz wywołania zwrotnego funkcji.

Tagi warunkowe WordPress są niezwykle przydatne. Jeśli nie jesteś uzależniony od haka, który pojawia się na bardzo wczesnym etapie wykonywania WordPressa, są one dostępne. Istnieją tagi warunkowe do sprawdzania, na której stronie (szablonie) jesteś, jeśli jesteś w menu lub pętli postów i wiele więcej. Na przykład podczas modyfikowania zapytania post przy użyciu zaczepu pre_get_postsbardzo przydatne jest upewnienie się, że kod działa tylko w określonych przypadkach. Na przykład;

add_action('pre_get_posts', 'my_function_name'); function my_function_name($query) { if (!is_admin()) { // Do your stuff } }

Ponieważ hook pre_get_postsdziała zarówno w admin, jak i w interfejsie, możemy użyć tagu warunkowego, aby upewnić się, że nasz kod wpływa tylko na zapytanie frontendu.

Tworzenie własnych haczyków

Możesz zdefiniować własne działania i filtry. Jeśli jesteś twórcą motywów lub wtyczek, zachęcamy do zrobienia tego, aby umożliwić innym modyfikację Twojego kodu bez zmiany kodu źródłowego.

Zarejestruj akcję za pomocą do_action()i zarejestruj filtr za pomocą apply_filters().

Wymaga do_action()minimum 1 parametru; nazwa haka. Pamiętaj, że nazwa haka musi być unikalna (nie wywołuj jej np. initponieważ jest to główny hak WordPressa). Umieść do_action()tam, gdzie chcesz, aby pojawił się hak. Na przykład możesz umieścić hak w motywie header.php, zaraz po treści, aby zdefiniować hak, w którym programiści mogą wyprowadzać skrypty lub inną zawartość.

Możesz dodać tyle parametrów, do_actionile chcesz po nazwie haka. Staraj się pamiętać, jakie dane programiści będą potrzebować w twoich hookach, które w inny sposób nie są łatwo dostępne.

Wymaga minimum 2 apply_filters()parametrów; nazwę haka i zmienną, na której rejestrujesz filtr. Na przykład Twój motyw może zarejestrować filtr wokół niektórych klas HTML, aby umożliwić programistom modyfikowanie lub dodawanie do nich:

Podobnie jak w przypadku akcji, możesz dodać dowolną liczbę parametrów apply_filterspo dwóch obowiązkowych parametrach.

Wnioski i przydatne zasoby

Mam nadzieję, że dzięki temu uzyskałeś solidne zrozumienie tego, jak WordPress uruchamia większość swojego kodu, jak możesz modyfikować kod i jak Ty jako programista możesz pozwolić innym programistom na wprowadzanie modyfikacji również w Twoim kodzie.

Źródło nagrywania: awhitepixel.com

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów