{"id":233504,"date":"2023-02-15T19:59:00","date_gmt":"2023-02-15T16:59:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233504"},"modified":"2022-11-11T00:03:15","modified_gmt":"2022-11-10T21:03:15","slug":"przewodnik-wszystko-o-hakach-w-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/przewodnik-wszystko-o-hakach-w-wordpress\/","title":{"rendered":"Przewodnik: Wszystko o hakach w WordPress"},"content":{"rendered":"\n<p>Powiedziano ci kiedy\u015b, \u017ce rozwi\u0105zanie twojego problemu polega na tym, \u017ce musisz \u201ezaczepi\u0107 si\u0119&quot; na czym\u015b, aby zrobi\u0107 co\u015b, co chcesz lub u\u017cy\u0107, <code>add_filter<\/code>nie rozumiej\u0105c, dlaczego to psuje? Haki stanowi\u0105 podstaw\u0119 WordPressa i zapewniaj\u0105 motywy i wtyczki umo\u017cliwiaj\u0105ce interakcj\u0119 lub zmodyfikuj kod.W tym po\u015bcie wyja\u015bnimy czym s\u0105 hooki, jak dzia\u0142aj\u0105 i jak mo\u017cemy ich u\u017cywa\u0107.<\/p>\n<h2>Czym s\u0105 haki?<\/h2>\n<p>Gdy WordPress przechodzi przez sw\u00f3j kod (od pocz\u0105tku \u0142adowania klas, \u0142adowania wtyczek, \u0142adowania motywu, tworzenia zapytania dla bie\u017c\u0105cego \u017c\u0105dania i wreszcie renderowania kodu HTML), przechodzi przez kilka \u201epunkt\u00f3w kontrolnych&#8221;; haki. Po napotkaniu haka WordPress zatrzyma to, co robi \u2013 i sprawdzi, czy s\u0105 jakie\u015b funkcje (w motywie, wtyczce lub samym WordPressie), kt\u00f3re s\u0105 zarejestrowane do uruchamiania w tym haku. Je\u015bli tak, WordPress uruchomi wszystkie te funkcje, a nast\u0119pnie kontynuuje od miejsca, w kt\u00f3rym zosta\u0142o przerwane.<\/p>\n<p>Dzi\u0119ki temu wtyczki, motywy i sam WordPress mog\u0105 \u201epodczepi\u0107 si\u0119&#8221; do okre\u015blonych punkt\u00f3w, aby doda\u0107 np. arkusze styl\u00f3w w <code>&lt;head&gt;<\/code>tagu motywu, zmodyfikowa\u0107 spos\u00f3b, w jaki WordPress wysy\u0142a zapytania do post\u00f3w, lub po prostu zmieni\u0107 tre\u015b\u0107 posta, je\u015bli jest to po\u017c\u0105dane.<\/p>\n<p>Istniej\u0105 dwa rodzaje haczyk\u00f3w; dzia\u0142ania i filtry. Dzia\u0142aj\u0105 bardzo podobnie, ale z jednym wyj\u0105tkiem, kt\u00f3remu przyjrzymy si\u0119 bli\u017cej poni\u017cej.<\/p>\n<h2>Akcje i filtry<\/h2>\n<p>Aby podpi\u0105\u0107 si\u0119 pod akcj\u0119 lub filtr, musisz zdefiniowa\u0107, kt\u00f3rego podpi\u0119cia (poprzez jego nazw\u0119) chcesz u\u017cy\u0107, oraz zdefiniowa\u0107 wywo\u0142anie zwrotne \u2013 czyli nazw\u0119 funkcji, kt\u00f3r\u0105 chcesz uruchomi\u0107. W wi\u0119kszo\u015bci przypadk\u00f3w podpi\u0119cia dostarczaj\u0105 parametry lub zmienne, kt\u00f3re s\u0105 istotne dla podpi\u0119cia.<\/p>\n<p>Akcje to po prostu \u201epunkty kontrolne&#8221; w wykonywaniu WordPressa, w kt\u00f3rych mo\u017cesz wykona\u0107 zadanie lub co\u015b powt\u00f3rzy\u0107. W niekt\u00f3rych rzadkich przypadkach mo\u017cna zmodyfikowa\u0107 obiekt (podany w parametrach), aby wszystkie kolejne wykonania dzia\u0142a\u0142y z tym zmienionym obiektem.<\/p>\n<p>Filtry s\u0142u\u017c\u0105 do zmiany zmiennej lub wyj\u015bcia. Wszystkie hooki filtr\u00f3w dostarczaj\u0105 zmienn\u0105, kt\u00f3r\u0105 mo\u017cesz zmieni\u0107 jako pierwszy parametr, i pozwalaj\u0105 na jej modyfikacj\u0119 lub zwr\u00f3cenie czego\u015b innego.<\/p>\n<p>WordPress obs\u0142uguje wiele haczyk\u00f3w, ale mo\u017cesz stworzy\u0107 w\u0142asne w swojej wtyczce lub motywie. Pozwala to programistom rozszerza\u0107 i modyfikowa\u0107 Tw\u00f3j kod; na przyk\u0142ad modyfikowanie wtyczki za pomoc\u0105 motywu lub modyfikowanie motywu nadrz\u0119dnego za pomoc\u0105 motywu potomnego.<\/p>\n<p>Wiele funkcji WordPressa, zwykle u\u017cywanych do drukowania post\u00f3w, to tak\u017ce filtry lub akcje. Na przyk\u0142ad funkcja <code>the_title()<\/code>wypisuje tytu\u0142 posta, ale jest te\u017c filtrem.<\/p>\n<p>Przyjrzyjmy si\u0119, jak w praktyce si\u0119 do nich pod\u0142\u0105czamy.<\/p>\n<h2>Podczepianie si\u0119 do dzia\u0142a\u0144<\/h2>\n<p>Aby podpi\u0105\u0107 si\u0119 pod akcj\u0119, u\u017cywasz metody <code>add_action()<\/code>. Jako minimum wymaga dw\u00f3ch parametr\u00f3w; nazwa haka i callback; nazwa funkcji, kt\u00f3r\u0105 chcesz uruchomi\u0107. Opcjonalnie mo\u017cesz poda\u0107 priorytet jako trzeci parametr i zdefiniowa\u0107 liczb\u0119 argument\u00f3w, kt\u00f3re zostan\u0105 przekazane do funkcji zwrotnej. Przyjrzymy si\u0119 dw\u00f3m opcjonalnym parametrom p\u00f3\u017aniej, ale na razie oto przyk\u0142ad <code>add_action<\/code>:<\/p>\n<pre><code>add_action('init', 'my_function_name');\nfunction my_function_name() {\n    \/\/ Do your stuff\n}<\/code><\/pre>\n<p>Pierwszy parametr <code>add_action<\/code>to nazwa akcji; w tym przypadku <code>init<\/code>, co jest do\u015b\u0107 powszechnym hakiem WordPressa, kt\u00f3ry ma miejsce podczas inicjowania. Drugim parametrem jest twoje wywo\u0142anie zwrotne, w tym przypadku nazwa funkcji, kt\u00f3r\u0105 chcemy uruchomi\u0107. Nast\u0119pnie wystarczy zdefiniowa\u0107 funkcj\u0119 o tej nazwie i doda\u0107 do niej sw\u00f3j kod.<\/p>\n<p>Mo\u017cesz tak\u017ce u\u017cy\u0107 funkcji anonimowych, w kt\u00f3rych definiujesz funkcj\u0119 wewn\u0105trz <code>add_action<\/code>zamiast podawa\u0107 nazw\u0119 funkcji, tak jak na przyk\u0142ad;<\/p>\n<pre><code>add_action('init', function() {\n    \/\/ Do your stuff\n});<\/code><\/pre>\n<p>Wielu programist\u00f3w preferuje t\u0119 metod\u0119, poniewa\u017c zapobiega to ryzyku przedefiniowania funkcji PHP o tej samej nazwie.<\/p>\n<p>Je\u015bli potrzebujesz uruchomi\u0107 funkcj\u0119 zdefiniowan\u0105 w klasie PHP, musisz poda\u0107 tablic\u0119 jako parametr wywo\u0142ania zwrotnego; gdzie pierwszy element to obiekt klasy, a drugi to nazwa funkcji:<\/p>\n<pre><code>class MyClass {\n    public function __construct() {\n        add_action('init', [$this, 'myFunctionName']);\n    }\n\u00a0\n    public function myFunctionName() {\n        \/\/ Do your stuff\n    }\n}<\/code><\/pre>\n<h2>Pod\u0142\u0105czanie do filtr\u00f3w<\/h2>\n<p>Aby podpi\u0105\u0107 si\u0119 pod filtr, u\u017cyj funkcji <code>add_filter()<\/code>. Podobnie jak w przypadku powy\u017cszych akcji, pierwszym parametrem jest nazwa filtra, a drugim callback. Opcjonalnie mo\u017cesz poda\u0107 priorytet jako trzeci parametr i liczb\u0119 argument\u00f3w jako czwarty. Oto przyk\u0142ad <code>add_filter<\/code>:<\/p>\n<pre><code>add_filter('the_title', 'my_function_name');\nfunction my_function_name($title) {\n    \/\/ Do your stuff\n    return $title;\n}<\/code><\/pre>\n<p>W powy\u017cszym przyk\u0142adzie podpinamy si\u0119 do filtra <code>the_title<\/code>(kt\u00f3ry wy\u015bwietla tytu\u0142 posta) i m\u00f3wi WordPressowi, aby uruchomi\u0142 nasz\u0105 funkcj\u0119. Wszystkie filtry zawsze podadz\u0105 jeden argument; zmienna do zmiany. W mojej funkcji nazwa\u0142em go, <code>$title<\/code>poniewa\u017c wiem, \u017ce zawiera tytu\u0142 posta. Wewn\u0105trz funkcji mog\u0119 j\u0105 zmodyfikowa\u0107 lub ca\u0142kowicie nadpisa\u0107 zmienn\u0105. Nale\u017cy pami\u0119ta\u0107, \u017ce w filtrach <strong>zawsze trzeba zwraca\u0107 zmienn\u0105<\/strong>. Je\u015bli nie zwr\u00f3cisz czego\u015b w swojej funkcji zwrotnej, zmienna zostanie opr\u00f3\u017cniona. Gdybym pomin\u0105\u0142 instrukcj\u0119 return w powy\u017cszym przyk\u0142adzie, \u017cadne tytu\u0142y post\u00f3w nigdy nie pojawi\u0142yby si\u0119 nigdzie.<\/p>\n<p>Argument zmiennej i zasada zwracania czego\u015b w funkcji zwrotnej to praktycznie jedyna r\u00f3\u017cnica mi\u0119dzy filtrami a akcjami. Wszystko inne dzia\u0142a tak samo. Mo\u017cesz post\u0119powa\u0107 zgodnie z przyk\u0142adami dla anonimowych funkcji i klas pokazanymi dla akcji powy\u017cej dla filtr\u00f3w, a tak\u017ce z opcjonalnymi parametrami priorytet i liczba argument\u00f3w; kt\u00f3rym przyjrzymy si\u0119 dalej.<\/p>\n<h2>Priorytet<\/h2>\n<p>Trzeci (opcjonalny) parametr do <code>add_action<\/code>i <code>add_filter<\/code>jest liczb\u0105 ca\u0142kowit\u0105, kt\u00f3ra definiuje priorytet funkcji zwrotnej. Jest to przydatne w przypadkach, gdy istnieje wiele funkcji (niekoniecznie od Ciebie w motywie lub wtyczce, pami\u0119taj, \u017ce sam WordPress u\u017cywa w\u0142asnych hook\u00f3w) i musisz zdecydowa\u0107, kt\u00f3r\u0105 z nich uruchomi\u0107 najpierw.<\/p>\n<p>Je\u015bli nie ma podanego priorytetu, warto\u015bci\u0105 domy\u015bln\u0105 jest 10. Im ni\u017cszy priorytet, tym wcze\u015bniej jest uruchamiany, a wy\u017cszy priorytet, tym p\u00f3\u017aniej jest uruchamiany. Nie mo\u017cesz poda\u0107 negatywnego priorytetu.<\/p>\n<p>Wyobra\u017a sobie wiele funkcji wywo\u0142a\u0144 zwrotnych zarejestrowanych w us\u0142udze <code>init<\/code>. Je\u015bli nie podano priorytetu dla wielu wywo\u0142a\u0144 zwrotnych, WordPress uruchomi je w kolejno\u015bci, w jakiej zosta\u0142y znalezione (na przyk\u0142ad w <code>functions.php<\/code>kodzie wtyczki).<\/p>\n<pre><code>add_action('init', 'my_function_name');\nadd_action('init', 'my_second_function_name');\nadd_action('init', 'my_third_function_name', 12);\nadd_action('init', 'my_fourth_function_name', 1);<\/code><\/pre>\n<p>To by\u0142aby kolejno\u015b\u0107, w jakiej WordPress b\u0119dzie uruchamia\u0142 powy\u017csze wywo\u0142ania zwrotne:<\/p>\n<ol>\n<li><code>my_fourth_function_name<\/code>(priorytet 1)<\/li>\n<li><code>my_function_name<\/code>(priorytet 10)<\/li>\n<li><code>my_second_function_name<\/code>(priorytet 10, ale pojawia si\u0119 p\u00f3\u017aniej w kodzie)<\/li>\n<li><code>my_third_function_name<\/code>(priorytet 12)<\/li>\n<\/ol>\n<h2>Liczba argument\u00f3w<\/h2>\n<p>Zazwyczaj hooki dostarczaj\u0105 dodatkowych danych, kt\u00f3re s\u0105 istotne i przydatne dla funkcji zwrotnych. Na przyk\u0142ad akcja <code>save_post<\/code>(uruchamiana za ka\u017cdym razem, gdy post jest aktualizowany) dostarcza dw\u00f3ch mo\u017cliwych argument\u00f3w; identyfikator posta i obiekt postu. S\u0105 one przydatne w przypadku operacji, kt\u00f3re zwykle trzeba uruchamia\u0107 w tym zaczepie (na przyk\u0142ad, je\u015bli chcesz zapisa\u0107 meta posta, potrzebujesz identyfikatora posta).<\/p>\n<p>Je\u015bli nie podano liczby argument\u00f3w dla akcji lub filtru, domy\u015blnie jest to 1. Dlatego nie musisz definiowa\u0107 1 on <code>add_filter<\/code>, aby uzyska\u0107 dost\u0119p do zmiennej, do kt\u00f3rej podpi\u0119ty jest filtr. Jednak akcje nie mog\u0105 przekazywa\u0107 \u017cadnych argument\u00f3w, mimo \u017ce liczba argument\u00f3w jest domy\u015blnie ustawiona na 1.<\/p>\n<p>Sp\u00f3jrzmy na przyk\u0142ad definiowania liczby argument\u00f3w i sposobu, w jaki uzyskujemy do nich dost\u0119p w naszej funkcji zwrotnej:<\/p>\n<pre><code>add_action('save_post', 'my_function_name', 10, 2);\nfunction my_function_name($post_id, $post) {\n    \/\/ Do your stuff\n}<\/code><\/pre>\n<p>W powy\u017cszym przyk\u0142adzie m\u00f3wimy WordPressowi, aby przekaza\u0142 dwa argumenty do naszej funkcji zwrotnej. Pami\u0119taj, \u017ce musimy zdefiniowa\u0107 priorytet jako trzeci parametr, wi\u0119c zwykle definiujemy warto\u015b\u0107 domy\u015bln\u0105, kt\u00f3ra wynosi 10. Je\u015bli chodzi o nasz\u0105 funkcj\u0119 zwrotn\u0105, mo\u017cemy teraz zdefiniowa\u0107 t\u0119 sam\u0105 liczb\u0119 argument\u00f3w, o kt\u00f3r\u0105 prosili\u015bmy, w powy\u017cszym przyk\u0142adzie by\u0142o 2.<\/p>\n<p>Gdyby\u015bmy w powy\u017cszym przyk\u0142adzie ustawili liczb\u0119 argument\u00f3w na 1, wype\u0142niony by\u0142by tylko pierwszy argument w naszej funkcji zwrotnej. Drugi, <code>$post<\/code>, by\u0142by niezdefiniowany.<\/p>\n<h2>Co je\u015bli potrzebujemy danych, kt\u00f3re nie zosta\u0142y przekazane w haczyku?<\/h2>\n<p>To zale\u017cy wy\u0142\u0105cznie od programisty, kt\u00f3ry stworzy\u0142 hak, aby zdefiniowa\u0107, jakie argumenty mog\u0105 zosta\u0107 przekazane. Oznacza to, \u017ce nie mo\u017cesz po prostu wymusi\u0107, jakich argument\u00f3w chcesz lub potrzebujesz w swoim <code>add_action<\/code>lub <code>add_filter<\/code>. Na szcz\u0119\u015bcie w wi\u0119kszo\u015bci przypadk\u00f3w mamy alternatywy, aby uzyska\u0107 potrzebne nam zmienne. Je\u015bli podpinasz si\u0119 do akcji lub filtru, w kt\u00f3rym wiesz, \u017ce pewne zmienne globalne powinny by\u0107 zdefiniowane, mo\u017cesz uzyska\u0107 dost\u0119p do tych zmiennych globalnych w funkcji zwrotnej. Ponadto WordPress ma <a href=\"https:\/\/codex.wordpress.org\/Conditional_Tags\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ca\u0142\u0105 gam\u0119 tag\u00f3w warunkowych,<\/a> kt\u00f3rych mo\u017cesz u\u017cy\u0107 w swoich funkcjach zahaczonych (z wyj\u0105tkiem bardzo wczesnych hook\u00f3w, kt\u00f3re wyst\u0119puj\u0105 zanim WordPress zdefiniuje te tagi warunkowe)<\/p>\n<p>Sp\u00f3jrzmy na przyk\u0142ad dost\u0119pu do zmiennych globalnych. Filtr <code>the_title<\/code>dostarcza identyfikator postu jako opcjonalny argument, do kt\u00f3rego mo\u017cemy uzyska\u0107 dost\u0119p, definiuj\u0105c go jako akceptowalny argument;<\/p>\n<pre><code>add_filter('the_title', 'my_function_name', 10, 2);\nfunction my_function_name($title, $post_id) {\n    if ($post_id == 1) {\n        return 'First post ever!';\n    }\n    return $title;\n}<\/code><\/pre>\n<p>Ten sam wynik mo\u017cemy jednak osi\u0105gn\u0105\u0107 poprzez;<\/p>\n<pre><code>add_filter('the_title', 'my_function_name');\nfunction my_function_name($title) {\n    global $post;\n    if ($post-&gt;ID == 1) {\n        return 'First post ever!';\n    }\n    return $title;\n}<\/code><\/pre>\n<p>Je\u015bli wiesz, \u017ce zmienna globalna jest zdefiniowana przez punkt uruchomienia podpi\u0119cia, mo\u017cesz zdefiniowa\u0107 je jako globalne w funkcji zwrotnej i uzyska\u0107 dost\u0119p do danych z tego miejsca. Na przyk\u0142ad zdefiniowanie <code>global $wp_query<\/code>w powy\u017cszym przyk\u0142adzie da\u0142oby r\u00f3wnie\u017c dost\u0119p do pe\u0142nego obiektu wp_query wewn\u0105trz wywo\u0142ania zwrotnego funkcji.<\/p>\n<p><a href=\"https:\/\/codex.wordpress.org\/Conditional_Tags\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Tagi warunkowe WordPress<\/a> s\u0105 niezwykle przydatne. Je\u015bli nie jeste\u015b uzale\u017cniony od haka, kt\u00f3ry pojawia si\u0119 na bardzo wczesnym etapie wykonywania WordPressa, s\u0105 one dost\u0119pne. Istniej\u0105 tagi warunkowe do sprawdzania, na kt\u00f3rej stronie (szablonie) jeste\u015b, je\u015bli jeste\u015b w menu lub p\u0119tli post\u00f3w i wiele wi\u0119cej. Na przyk\u0142ad podczas modyfikowania zapytania post przy u\u017cyciu zaczepu <code>pre_get_posts<\/code>bardzo przydatne jest upewnienie si\u0119, \u017ce kod dzia\u0142a tylko w okre\u015blonych przypadkach. Na przyk\u0142ad;<\/p>\n<pre><code>add_action('pre_get_posts', 'my_function_name');\nfunction my_function_name($query) {\n    if (!is_admin()) {\n        \/\/ Do your stuff\n    }\n}<\/code><\/pre>\n<p>Poniewa\u017c hook <code>pre_get_posts<\/code>dzia\u0142a zar\u00f3wno w admin, jak i w interfejsie, mo\u017cemy u\u017cy\u0107 tagu warunkowego, aby upewni\u0107 si\u0119, \u017ce nasz kod wp\u0142ywa tylko na zapytanie frontendu.<\/p>\n<h2>Tworzenie w\u0142asnych haczyk\u00f3w<\/h2>\n<p>Mo\u017cesz zdefiniowa\u0107 w\u0142asne dzia\u0142ania i filtry. Je\u015bli jeste\u015b tw\u00f3rc\u0105 motyw\u00f3w lub wtyczek, zach\u0119camy do zrobienia tego, aby umo\u017cliwi\u0107 innym modyfikacj\u0119 Twojego kodu bez zmiany kodu \u017ar\u00f3d\u0142owego.<\/p>\n<p>Zarejestruj akcj\u0119 za pomoc\u0105 <code>do_action()<\/code>i zarejestruj filtr za pomoc\u0105 <code>apply_filters()<\/code>.<\/p>\n<p>Wymaga <code>do_action()<\/code>minimum 1 parametru; nazwa haka. Pami\u0119taj, \u017ce nazwa haka musi by\u0107 unikalna (nie wywo\u0142uj jej np. <code>init<\/code>poniewa\u017c jest to g\u0142\u00f3wny hak WordPressa). Umie\u015b\u0107 <code>do_action()<\/code>tam, gdzie chcesz, aby pojawi\u0142 si\u0119 hak. Na przyk\u0142ad mo\u017cesz umie\u015bci\u0107 hak w motywie <code>header.php<\/code>, zaraz po tre\u015bci, aby zdefiniowa\u0107 hak, w kt\u00f3rym programi\u015bci mog\u0105 wyprowadza\u0107 skrypty lub inn\u0105 zawarto\u015b\u0107.<\/p>\n<pre><code>...\n&lt;body&gt;\n    &lt;?php do_action('mytheme_after_body'); ?&gt;<\/code><\/pre>\n<p>Mo\u017cesz doda\u0107 tyle parametr\u00f3w, <code>do_action<\/code>ile chcesz po nazwie haka. Staraj si\u0119 pami\u0119ta\u0107, jakie dane programi\u015bci b\u0119d\u0105 potrzebowa\u0107 w twoich hookach, kt\u00f3re w inny spos\u00f3b nie s\u0105 \u0142atwo dost\u0119pne.<\/p>\n<p>Wymaga minimum 2 <code>apply_filters()<\/code>parametr\u00f3w; nazw\u0119 haka i zmienn\u0105, na kt\u00f3rej rejestrujesz filtr. Na przyk\u0142ad Tw\u00f3j motyw mo\u017ce zarejestrowa\u0107 filtr wok\u00f3\u0142 niekt\u00f3rych klas HTML, aby umo\u017cliwi\u0107 programistom modyfikowanie lub dodawanie do nich:<\/p>\n<pre><code>&lt;section class=\"&lt;?php echo apply_filters('mytheme_section_classes', 'section default-class'); ?&gt;\"&gt;\n    ...\n&lt;\/section&gt;<\/code><\/pre>\n<p>Podobnie jak w przypadku akcji, mo\u017cesz doda\u0107 dowoln\u0105 liczb\u0119 parametr\u00f3w <code>apply_filters<\/code>po dw\u00f3ch obowi\u0105zkowych parametrach.<\/p>\n<h2>Wnioski i przydatne zasoby<\/h2>\n<p>Mam nadziej\u0119, \u017ce dzi\u0119ki temu uzyska\u0142e\u015b solidne zrozumienie tego, jak WordPress uruchamia wi\u0119kszo\u015b\u0107 swojego kodu, jak mo\u017cesz modyfikowa\u0107 kod i jak Ty jako programista mo\u017cesz pozwoli\u0107 innym programistom na wprowadzanie modyfikacji r\u00f3wnie\u017c w Twoim kodzie.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_action\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">add_action<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_filter\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dodaj_filtr<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Conditional_Tags\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Tagi warunkowe WordPress<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/do_action\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">zr\u00f3b_dzia\u0142anie<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/apply_filters\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">zastosuj_filtry<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>W tym przewodniku dla pocz\u0105tkuj\u0105cych dowiemy si\u0119, czym s\u0105 haki i filtry WordPress, jak dzia\u0142aj\u0105 i jak z nich korzysta\u0107.<\/p>\n","protected":false},"author":1,"featured_media":153117,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[897,721,721,897,1110,836,836,845,929,929,845,866,866],"tags":[1169],"class_list":["post-233504","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kod","category-deweloper","category-n-a","category-przewodnik-dla-poczatkujacych","category-samouczki","category-tematy","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233504","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=233504"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233504\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/153117"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=233504"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=233504"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=233504"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}