WordPress - motywy, wtyczki, informacje, programowanie

Hooks - akcje, filtry

Haki WordPressa cz.1 – Wprowadzenie do akcji i filtrów

W pierwszej części poradnika opowiemy, co to są WordPress hooks (po polsku haki), stanowiące część Plugin API WordPressa oraz jak działają filtry i akcje. Dowiesz się dlaczego są takie ważne dla każdego programisty i dla rozwoju WordPressa. Pokażemy jak z nich prawidłowo korzystać, jak je dodawać, usuwać i na co uważać.

Jeśli znasz już tę część poradnika, zapraszamy do lektury części drugiej: Haki WordPressa, cz. 2 – Akcje i filtry od środka.

Przyczyna sukcesu WordPressa?

Każdy sukces ma swoją przyczynę. Jeśli ktoś by mnie zapytał skąd się wziął w przypadku WordPressa odpowiedziałbym krótko „akcje i filtry”. Dawno temu, przed ich wprowadzeniem (w wersji 1.2, w roku 2004) był to de facto system zamknięty. Jeśli ktoś chciał zmienić jakąś funkcjonalność musiał dłubać w kodzie samego WordPressa, a to nie miało żadnej przyszłości.

Gdyby taki stan pozostał, lub wymyślono jakiś bardzo elegancki programistycznie, ale złożony system tworzenia rozszerzeń, WordPress niemal na pewno by obumarł. Być może funkcjonowałby jako jeden z tysięcy peryferyjnych systemów do tworzenia serwisów, które można znaleźć w sieci. W tej chwili korzysta z niego niemal 16% z pierwszego miliona największych serwisów wg Alexy. Ma 54% udział wśród serwisów które używają dającego się rozpoznać CMSa.

WordPress - udział

Udział WordPressa wśród dających się rozpoznać systemów CMS na 1 milionie największych serwisów w sieci

Na szczęście wymyślono rozwiązanie proste i bardzo pragmatyczne (jak w wielu innych przypadkach w tym systemie).  Dzięki akcjom i filtrom twórca wtyczki, czy motywu, a nawet stosunkowo słabo programujący bloger może łatwo i bezpiecznie zmienić niemal każdą funkcjonalność, nie dotykając kodu źródłowego WordPressa. Z czasem okazało się, że system jest rozwijany przez tysiące ludzi. Żeby pisać do niego proste dodatki nie trzeba uczyć się skomplikowanego API, znać wszystkich jego tajemnic, nie trzeba być nawet mistrzem PHP. Ma to swoje wady, ale z masy ludzi, którzy próbują swoich sił przynajmniej część ma dobre pomysły i potrafi to dobrze zakodować.

WordPress - Google Trends

Google Trends dla WordPressa, Joomli i Drupala - ilość zapytań (dane globalne)

Jak działają akcje i filtry czyli haki WordPressa

Przy każdej odsłonie strony, uruchamiany jest core WordPressa, a potem wszystkie wtyczki, aktualny motyw, a na końcu odpowiedni szablon, który wyświetla stronę. Kolejno wykonywane są setki funkcji, które sprawiają, że kiedy przychodzi kolej na szablon konkretnej strony, mamy już do dyspozycji wszystko co potrzeba. Mamy wszystkie ustawienia, wczytane z bazy danych artykuły, komentarze, dane o obrazkach, znamy wszystkie parametry podane w URL, wiemy, czy użytkownik jest zalogowany, a jeśli tak to kim jest. Mamy też do dyspozycji dodatkowe elementy, których dostarczają nam wtyczki i używany motyw.

Podczas całego tego procesu występuje setki sytuacji, kiedy WordPress właśnie zabiera się do jakiejś nowej operacji, albo właśnie jakąś ukończył. Na przykład  właśnie ma zamiar wczytać wpisy z bazy danych, albo właśnie ma zamiar zwrócić tytuł strony. We wszystkich tych momentach wywoływane są przypisane do nich haki, czyli akcje i filtry. Jeżeli jeden z  pluginów albo motyw „podpiął się” na dany hak, czyli zdefiniował swoją akcję albo filtr, ma w ten sposób szansę przejąć na chwilę kontrole nad tym co się dzieje, wykonać jakąś operację, zmienić jakieś dane, dodać coś do treści strony.

WordPress wywołuje akcje przy pomocy funkcji:

do_action (‘nazwa-akcji’, parametry… )

Filtry wywoływane są funkcją:

apply_filter (‘nazwa-filtra', parametry… )

Na przykład w kodzie źródłowym WordPressa, w pliku wp-includes/default-widgets.php, prawie na samym końcu możemy znaleźć linijkę:

do_action(‘widgets_init’)

Powyższa linia to wywołanie wszystkich akcji podpiętych na  hak ‘widgets_init’. WordPress właśnie zakończył rejestrowanie swoich domyślnych widgetów i pozwala aby wtyczki i aktywny motyw zarejestrowały swoje (albo zrobiły cokolwiek innego).

W pliku WordPressa wp-includes/formatting.php możemy znaleźć krótką funkcję wp_trim_excerpt, której zadaniem jest przycięcie do rozsądnej długości wypisu, czyli skrótu artykułu

function wp_trim_excerpt($text = '') {
	$raw_excerpt = $text;
	if ( '' == $text ) {
		$text = get_the_content('');

		$text = strip_shortcodes( $text );

		$text = apply_filters('the_content', $text);
		$text = str_replace(']]>', ']]>', $text);
		$excerpt_length = apply_filters('excerpt_length', 55);
		$excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');
		$text = wp_trim_words( $text, $excerpt_length, $excerpt_more );
	}
	return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}

Widzimy tutaj aż cztery wywołania apply_filters. Trzy z nich odnoszą się do sytuacji kiedy podczas edycji artykułu nie podano ręcznie wypisu (co jest powszechną praktyka na większości serwisów)

  • Linia 8 – Dla podanej wcześniej treści całego artykułu wywoływany jest filtr dla haka 'the_content'. Dzięki niemu programista w WordPressie może dowolnie przekształcić tekst artykułu zanim zostanie on wyświetlony na stronie, ponieważ jest on wywoływany zawsze.
  • Linia 10 – Wywołany zostaje filtr dla haka 'excerpt_length' z parametrem 55 który określa długość wypisu w słowach. Domyślna długość, jak widać dość brzydko zhardcodowana w WordPressie to 55 słów. Możemy stworzyć własny filtr, który ignoruje liczbę 55 i zwraca np. 20, przez co wszystkie wypisy będą krótsze. Można też zrobić bardziej zaawansowany filtr, na przykład  taki, który będzie przycinał wypisy do różnej długości, w zależności od tego na jakiej stronie mają być wyświetlone, albo do jakiej kategorii należy artykuł.
  • Linia 11 – Wywoływany jest filtr dla haka 'excerpt_more' w którym programista może podmienić sekwencję znaków oznaczająca przycięcie tekstu. Domyślnie jest to sekwencja […]
  • Na koniec, w linii 14 programista pluginu lub motywu dostaje jeszcze ostatnią szansę na to, żeby coś zrobić z wykrojonym już albo zaczytanym z bazy wypisem.

Tak wielkie nagromadzenie filtrów w dość krótkiej procedurze wynika z tego, że wypis z artykułu, jego długość i postać mają ogromne znaczenie dla komunikacji i uzyteczności całego serwisu.

Dodawanie akcji i filtrów

Jeżeli chcemy się podpiąć na dany hak, musimy użyć funkcji add_action albo add_filter.

Korzysta się z nich w bardzo podobny sposób:

add_action (‘nazwa haka’, ‘nazwa-mojej-funkcji”, $priorytet, $ile_argumentów)

albo

add_filter (‘nazwa haka’, ‘nazwa-mojej-funkcji”, $priorytet, $ile_argumentów)

Nawiązując do jednego z powyższych przykładów, napiszmy filtr przycinający wypisy do artykułów do 100 wyrazów dla wszystkich stron poza stroną główną, gdzie wypisy przytniemy do 20 wyrazów.

function test_excerpt_length( $length ) {
	if (is_home())
		return 20;
	else
		return 100;
}

add_filter( 'excerpt_length', 'test_excerpt_length');

Teraz kolej na przykładową akcję. Skorzystamy z haka 'wp_head'. WordPress wywołuje ją aby autorzy wtyczek i motywów mogli wypisać coś w obrębie tagu <head></head>, na przykład, tak jak w poniższym kawałku kodu, wstawić elementy OpenGraph dla facebooka i innych serwisów, które z nich korzystają.

function test_head() {
	if (is_singular())
	{
		echo '<meta property="og:url" content="'.get_permalink().'">'."\n";
		echo '<meta property="og:title" content="'.get_the_title().'">'."\n";
	}
}

add_action( 'wp_head', 'test_head' );

Jak widać w obydwu przypadkach definiujemy własną funkcję i podpinamy ja odpowiednio przy pomocy add_action albo add_filter na odpowiedni hak.

Do obydwu tych funkcji możemy podać dwa dodatkowe parametry.

Pierwszy to priorytet naszej akcji lub filtra. Określa on w jakiej kolejności będzie wykonana biorąc pod uwagę, że dla danego haka może być dodanych wiele akcji lub filtrów. Użyty w powyższym przykładzie hak 'wp_head' ma zwykle podpiętą całą masę akcji. Kilka podpina sam WordPress, korzystają z niego też wtyczki i motywy chcąc dopisać do <head></head> ładowanie własnych skryptów, arkuszy styli albo tak jak w powyższym przykładzie dodających inne metadane. Jeżeli użyjemy priorytetu 0 (zero) nasza akcja zostanie wywołana jako jedna z pierwszych, jeśli 100 to raczej jako jedna z ostatnich. Domyślnym priorytetem jest 10.

Niestety, nie ma żadnych ograniczeń, priorytet można podać dowolnie duży lub mały, również ujemny, dlatego nigdy nie możemy mieć gwarancji, że nasza akcja lub filtr wykona się jako pierwsza lub ostatnia. Jest to pewien problem jeśli piszemy plugin, który potem będzie używany przez wielu developerów w wielu środowiskach, ale jakoś wszyscy z tym żyją…  Na szczęście kolejność wykonania często nie ma znaczenia.

Drugi parametr określa jak dużo argumentów akceptuje nasza funkcja którą podpinamy przez add_action albo add_filter. Domyślnie przyjmowane jest 1.

Czym się różnią akcje od filtrów

Już na pierwszy rzut oka widać, że akcje i filtry są bardzo podobne. Identycznie się je podpina, identycznie tworzy. Potwierdza się to kiedy zaglądniemy do kodu WordPressa, do pliku wp-includes/plugin.php, a tam jak byk mamy na przykład:

function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
	return add_filter($tag, $function_to_add, $priority, $accepted_args);
}

Kiedy popatrzymy do kodu funkcji do_action i apply_filter zobaczymy, że i akcje i filtry są trzymane w jednej tablicy $wp_filter. Zatem gdzie jest różnica tak naprawdę i czy nie jest to sztuczne mnożenie bytów. Otóż nie. Choć to rozróżnienie jest w dużej części jedynie formalne, jest niezwykle istotne.

Filtry jak sama nazwa wskazuje filtrują dane. Otrzymują pewne dane w parametrze na wejściu (zawsze w pierwszym), mogą je przekształcić lub pobrać skądś alternatywne i na koniec mają zwrócić na wyjściu te same lub inne dane, ale tak, aby mogły być użyte przez programistę dokładnie w tym samym celu w jakim miały być użyte dane oryginalne. Filtr dla haka 'the_content" dostaje na wejściu treść artykułu, może ją przekształcić, coś do niej dodać lub wyciąć, może coś doczytać z innej bazy, może nawet kompletnie podmienić treść (np. na inna wersję językową), ale na końcu, to co zwróci, ma mieć dalej sens jako treść tego artykułu, który jest właśnie wyświetlany.

Filtry przekształcają dane i nie wolno im robić nic takiego, co może wywołać jakiekolwiek inne efekty uboczne. Jeżeli jakaś wtyczka doda filtr 'the_content', który oprócz przekształcenia treści artykułu (czyli tego co powinien robić) wypisuje coś na wyjście, zapisuje coś do tabel WordPressa w bazie danych, modyfikuje jakieś zmienne globalne, to może być powodem koszmarnych problemów. Będzie się kłóciła z innymi wtyczkami, powodując trudne do wykrycia błędy, czasem uniemożliwiając ich działanie. Jeśli spodziewam się otrzymać na wyjściu przefiltrowane dane, to mam otrzymać tylko to. Jeśli oprócz tego wywołanie filtra spowoduje np. wysłanie emaila do admina to bardzo szybko wyrzucę wtyczkę, która zrobiła taki bałagan.

Akcje nie zwracają żadnych wyników, jest to po prostu wywołanie funkcji w danym punkcie kodu. Tym, co spodziewamy się, że będą robiły jest pisanie na wyjście, modyfikacje bazy danych czy stanu systemu.

Poszczególne haki są przeznaczone albo do podpięcia akcji albo filtra i nie można tego zmienić. Mamy więc haki dla akcji (action hooks) i haki dla filtrów (filter hooks). Niestety w dokumentacji WordPressa więszość nie jest udokumentowana, postaramy się to nadrobić z czasem na WPinternals.

Funkcje do zarządzania akcjami i filtrami

Obok pary funkcji add_action i add_filter, które służą do dodawania akcji i filtrów dla poszczególnych haków oraz pary do_action i apply_filters, które służą do uruchamiania odpowiednio wszystkich akcji i filtrów dla danego haka, WordPress w Plugin API definiuje cały zestaw dodatkowych funkcji.

Poniżej zastosujemy konwencję nazewnictwa z kodu źródłowego WordPressa (kopiując nagłówki funkcji). We wszystkich funkcjach parametr $tag określa nazwę filtra lub akcji.

apply_filters_ref_array ($tag, $array)
do_action_ref_array ($tag, $array)

Funkcje te są odpowiednikami do_action i apply_filters, ale oprócz nazwy haka $tag, zamiast listy parametrów przyjmują jeden parametr $array w postaci referencji do tablicy z parametrami. Funkcje te są bardzo użyteczne jeśli wszystkie dane, jakie chcemy przekazać do filtra lub akcji, mamy akurat w tablicy, co się zdarza dość często, albo wtedy gdy chcemy przekazać naprawdę dużą strukturę.

Funkcja apply_filters_ref_array zwraca dane po przetworzeniu przez wszystkie filtry danego haka w kolejności priorytetu.

has_filter ($tag, $function_to_check = false)
has_action ($tag,  $function_to_check = false)

Jeśli podamy tylko $tag (nazwę haka) funkcje te zwracają true jeśli do danego haka jest przypisany  (odpowiednio) jakikolwiek filtr lub akcja. Jeśli podamy dodatkowo nazwę funkcji  (parametr $function_to_check) funkcje zwracają true jeśli podpięta jest funkcja o  dokładnie takiej nazwie.

remove_filter ($tag, $function_to_remove, $priority=10, $accepted_args=1)
remove_action ($tag, $function_to_remove, $priority=10, $accepted_args=1)

Funkcje służą odpowiednio do usuwania filtra lub akcji dla haka $tag. Specyfiką tych funkcji jest to, że musimy podać dokładnie nie tylko nazwę haka, oraz nazwę funkcji, która ma być usunięta, ale też priorytet z jakim dana akcja lub filter były dodane przez odpowiednio add_filter lub add_action. Wynika to z organizacji struktury danych w jakiej WordPress trzyma informacje o filtrach i akcjach. Parametr $accepted_args w obecnej wersji nie jest wykorzystywany.

Funkcje zwracają true jeżeli udało się usunąć filtr/akcję

Osobiście uważam, wbrew temu co można przeczytać nawet w dokumentacji, że nie powinniśmy zbyt radośnie usuwać domyślnych filtrów i akcji. Powinniśmy to robić tylko wtedy gdy mamy absolutną konieczności i pewność, że taka operacja nie będzie miała efektów ubocznych. Częściej możemy potrzebować usunąć własny filter lub akcję.

remove_all_filters ($tag, $priority=false)
remove_all_actions ($tag, $priority=false)

Usuwa odpowiednio wszystkie filtry lub wszystkie akcje dla danego haka. Jeśli podamy parametr $priority zostaną usunięte tylko te filtry/akcje, które zostały dodane z takim priorytetem. Jeśli nie podamy tego parametru zostaną usunięte wszystkie filtry/akcje dla tego haka niezależnie od priorytetu.

Funkcje zawsze zwracają true.

current_filter ()

Zwraca aktualnie wykonywany filtr lub akcję. Funkcja jest przeznaczona z zasady do sprawdzania czy w danym momencie jesteśmy w trakcie wykonywania jakiegoś filtra/akcji i jeśli tak to  jakiego/jakiej. Jest użyteczna wtedy, gdy dana funkcja może być wywoływana z wielu różnych miejsc, w tym z wnętrza filtra/akcji i w zależności od tego powinna się inaczej zachowywać.

did_action($tag)

Zwraca liczbę wywołań danej akcji (ile razy została dotąd wywołana)

Dwa słowa o shortcodach

Jeśli czytałeś artykuł Co to są shortcodes i jak ich używać? oraz w poradnik Oprogramowanie własnego shortcode w motywie WordPressa powinno Cię uderzyć podobieństwo tego mechanizmu do filtrów. Mamy funkcję add_shortcode, która dodaje funkcję obsługująca dany shortcode, remove_shortcode, która ją usuwa oraz funkcję do_shortcode, której w pierwszym parametrze podaje się tekst (najczęściej treść artykułu), a na wyjściu zwraca ona ten tekst z rozwiniętymi wszystkimi shortcodami.

Na pewno przyszło Ci do głowy, że gdyby nikt nie oprogramował w core WordPressa mechanizmu shortcodów, mógłbyś je sam dodać pisząc odpowiedni, dość rozbudowany filtr dla haka 'the_content'. I co sie okazuje, jeśli spojrzymy w kod źródłowy WordPressa, na samym końcu pliku wp-includes/shortcodes.php znajdziemy linię:

add_filter('the_content', 'do_shortcode', 11);

Zatem możesz potraktować cały mechanizm shortcodów w WordPressie jako przykład implementacji bardzo rozwiniętego filtra. jednocześnie pokazuje to jak mocarnym narzędziem są haki WordPressa i jak mocno możemy ingerować w logikę całego systemu przy ich pomocy.

Zapraszamy do lektury drugiej części tego poradnika: Haki WordPressa, cz. 2 – Akcje i filtry od środka.

Powiadomimy Cię o nowych artykułach

Komentarzy: 26

  1. Kompetentny autor, świetne artykuły! Gratulacje i podziękowania.

  2. Pingback: S | Tworzenie witryn interntowych

  3. Mam pytanko, nie mogę nigdzie znaleźć odpowiedzi. Jaka jest kolejność wykonywania wtyczek w wp. Jeżeli 10 wtyczek chce pobrać i przetworzyć pewne dane to skąd wordpress wie której użyć najpierw? Nie wiem czy dobrze to wyjaśniłem

    • Nie możesz zakładać, że pliki php poszczególnych wtyczek dołączane są w jakiejś szczególnej kolejności. Nie ma to zresztą znaczenia. Wtyczki na tym etapie nie robią zazwyczaj nic poza inicjalizacją obiektów i instalowaniem akcji i filtrów dla różnych haków, ponieważ dzieje się to wszystko zanim jeszcze wysłane są nagłówki strony więc wtyczka nie może zrobić na tym etapie nic, co zobaczy użytkownik. Od tego na jakie haki podpięła się wtyczka i z jakim priorytetem zależy co i w jakiej kolejności się później uruchomi. Przeczytaj ten poradnik, on Ci wiele wyjaśni (obie części). Nie wiem do czego jest Ci to potrzebne, ale jest to generalnie dość złożone zagadnienie. Trzeba bardzo dobrze rozumieć jaki jest flow wykonania skryptów w WordPressie i jak działają haki żeby zrobić cokolwiek, co od tego flow zależy.

      • Witam ponownie,

        Przykładowo że:
        Mam wtyczke aa i wtyczke bb. Oby dwie mają za zadanie pobrać np tytuł strony i dokleić do niego tekst wtyczka aa doklei ‚aa’ a wtyczka bb doklei ‚bb’. Pytanie brzmi jak będzie to wyglądało czy:

        – tytuł aa bb
        – tytuł bb aa
        czy jeszcze jakoś inaczej, chciałbym poznać po prostu filozofie wordpressa

        • Chyba zaskoczyłem pytaniem 🙂

          • Nie, nie zaskoczyłeś – weekend, rodzina itd.

            Myślę, że Ty nie do końca rozumiesz jaki jest flow wykonania WordPressa, nawet nie w sensie co po kolei, tylko jak to działa w ogóle, jaka jest ogólna logika. Ale może się mylę, dlatego wyjaśnię tak jakbyś rozumiał, a jeśli nie to ja już nic nie poradzę, bo to za duży temat na odpowiedź w komentarzach.

            Jeśli chodzi o tytuł posta, to dwie wtyczki, które chcą go modyfikować powinny się zapiąć na hak ‚wp_title’. Są inne możliwości, ale ta jest słuszna i zbawienna. I zapinając się na ten hak (funkcją add_filter()) każda z nich podaje priorytet i w kolejności tego priorytetu dostaną ten tytuł do przerabiania. Pierwsza dostanie goły tytuł, druga tytuł przetworzony przez pierwszą (jak ich będzie 100, to dalej wg tej samej logiki). Jak podadzą ten sam priorytet, to kolejność jest przypadkowa.

            Tak czy owak ani w tym przypadku (haka wp_title), ani w żadnym innym, nie ma znaczenie kolejność ładowania, czy instalowania wtyczek. Możesz stwierdzić doświadczalnie jakąś zgodność gdy priorytet nie rozstrzyga, ale to będzie obserwacja, na której nie możesz polegać. Dziś może być tak, jutro inaczej.

          • Właśnie mi wyjaśniłeś. Dziękuje

          • Zastanawiam się jeszcze czy haki mocno obciążają cmsa? Bo jednak tworzy się dość dużo funkcji.

          • Dopóki nie dodasz akcji ani filtra to jest tylko sprawdzenie w tablicy. Później koszt jest pomijalny jak przyłożysz do całej reszty. Zobacz ile WordPress ma funkcji i ile zapytań do bazy zadaje na start zupełnie golutki.

          • Bo właśnie piszę mały skrypcik, chciałbym dodać w nim obsługę pluginów automatycznie, coś jak w wp. I zastanawiam się czy nie zastosować właśnie haków. Tylko założeniem jest też szybkość i tu zaczynam walkę ze sobą. :S

          • Nie walcz ze sobą 🙂 To jest znakomita metoda i bardzo tania jak się ją dobrze zaimplementuje i jeśli to nie jest jakieś bardzo szczególne zastosowanie i miejsce w skrypcie (w środku pętli wołanej milion razy na sekundę 🙂 ). Przecież jak ktoś nie doda nic na danego haka to jest to proste sprawdzenie w tablicy. Przeczytaj sobie drugą część tekstu tam widać w jakiej skali to WordPress wykorzystuje i to jest kompletnie nieodczuwalne przy całej reszcie (zapytaniach do bazy, itd.)

          • swoją drogą akcja i filtr to to samo. tj. add_action i add_filter

          • Nie to samo. Technicznie to jest w tej samej tablicy pod spodem mechanizm jest jeden (wyjaśniam to dokładnie w drugiej części tego tekstu), ale rozróżnienie jest celowe i istotne – to z kolei wyjaśniam w tym tekście.

          • function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
            return add_filter($tag, $function_to_add, $priority, $accepted_args);
            }

          • Przeczytaj dokładnie moja odpowiedź. To co wkleiłeś nie stoi w sprzeczności z tym co napisałem, pisze o tym wyraźnie w drugiej części tekstu. Natomiast nie przegap różnicy logicznej – do czego służą akcje, a do czego filtry. Bo ona jest bardzo istotna.

          • Przeczytalem i szczerze mowiac chyba bez zrozumienia, dalej nie widze roznicy. chyba jestem jeszcze na za niskim poziomie php

          • Nie chodzi o PHP, technicznie to działa na tym samym mechanizmie. Chodzi o logikę stosowania. Masz rozdział „Czym się różnią akcje od filtrów”

          • Ale wordpress rozpoznaje czy hak zostal podpiety z akcji czy z filtra? czy to poprostu taka jakby netykieta programowania? sorki za marudzenie

          • Rozpoznaje w tym sensie że w wypadku filtra liczy się rezultat funkcji, ale to nie ma w tych rozważaniach znaczenia.
            Chodzi jak Ty to piszesz netykietę programowania, a ja nazywam kulturą programowania.
            Jak na przykład będziesz wypisywał w filtrze rzeczy na ekran to jest to technicznie możliwe, ale nie wolno tego robić. Od takich rzeczy są akcje.
            Jak masz w domu dwie identyczne pompy i jedną używasz do pompowania szamba, a drugą do pompowania wody ze studni do picia, to one co prawda technicznie są identyczne, ale nie powinieneś ich stosować zamiennie 🙂 To kwestia higieny.

          • @uses add_filter() Adds an action. Parameter list and functionality are the same

          • Dziekuje za poświęcony czas! I za dużą wytrzymalość 🙂 i wszystko zrozumialem :), będę czesto zaglądał 🙂

  4. Pingback: Własne informacje i przyciski na pasku admina. Wykorzystanie AJAXa. » WPinternals

  5. Swoją drogą fajna stronka, mógłbyś szerzej opisać api wordpressa bo wszystko jest po angielsku.

  6. Masz jakiś pomysł jak stworzyć takie jakby akcje ale na swoim cms? Myślałem o funkcji, żeby zbierać dane np static a później je wyświetlić

  7. Bardzo dobrze wyjaśnione, dzięki!