{"id":233838,"date":"2023-02-23T13:22:00","date_gmt":"2023-02-23T10:22:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233838"},"modified":"2022-11-11T12:43:57","modified_gmt":"2022-11-11T09:43:57","slug":"utworz-niestandardowy-blok-gutenberga-czesc-2-zarejestruj-blok","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/utworz-niestandardowy-blok-gutenberga-czesc-2-zarejestruj-blok\/","title":{"rendered":"Utw\u00f3rz niestandardowy blok Gutenberga &#8211; Cz\u0119\u015b\u0107 2: Zarejestruj blok"},"content":{"rendered":"\n<p>W tej cz\u0119\u015bci napiszemy Javascript, aby zarejestrowa\u0107 i skonfigurowa\u0107 nasz niestandardowy blok. Na koniec zarejestrujemy skrypt w PHP i wykonamy niezb\u0119dny kod PHP, aby WordPress rozpozna\u0142 go jako nowy blok.<\/p>\n<p>Najpierw kr\u00f3tka informacja o tym, jak uzyska\u0107 dost\u0119p do funkcji i komponent\u00f3w WordPress Gutenberg.<\/p>\n<h2>Pakiet globalny <code>wp<\/code>i destrukturyzacja<\/h2>\n<p>Kiedy jeste\u015bmy w pliku JavaScript umieszczonym w kolejce w edytorze Gutenberg, mamy dost\u0119p do globalnego obiektu\/pakietu: <code>wp<\/code>. Jest to bardzo, bardzo du\u017cy obiekt JavaScript i zawiera ca\u0142\u0105 mas\u0119 przydatnych komponent\u00f3w i funkcji, kt\u00f3rych u\u017cyjemy do tworzenia blok\u00f3w. Pisz\u0105c JavaScript dla blok\u00f3w niestandardowych, b\u0119dziesz odwo\u0142ywa\u0107 si\u0119 do <code>wp<\/code>wielu.<\/p>\n<p>Dlatego powszechne jest, zar\u00f3wno we wsp\u00f3\u0142czesnym JavaScript, jak i w React, destrukturyzacj\u0119 tego, czego chcemy z niego u\u017cy\u0107. Zasadniczo oznacza to po prostu, \u017ce definiujemy zmienne lokalne z cz\u0119\u015bci wi\u0119kszej struktury. Na przyk\u0142ad pierwsza funkcja, kt\u00f3rej u\u017cyjemy, to <code>registerBlockType()<\/code>ta, kt\u00f3ra istnieje w <code>wp.blocks<\/code>. Mo\u017cemy wywo\u0142a\u0107 funkcj\u0119 tak:<\/p>\n<pre><code>wp.blocks.registerBlockType();<\/code><\/pre>\n<p>Ale \u0142atwiej to zdekonstruowa\u0107 tak:<\/p>\n<pre><code>const { registerBlockType } = wp.blocks;\nregisterBlockType();<\/code><\/pre>\n<p>Teraz mo\u017cesz odwo\u0142ywa\u0107 si\u0119 do funkcji bezpo\u015brednio, bez poprzedzania jej struktur\u0105. O wiele bardziej przydaje si\u0119, gdy odwo\u0142ujemy si\u0119 do funkcji lub komponent\u00f3w, kt\u00f3re b\u0119dziemy cz\u0119sto powtarza\u0107.<\/p>\n<p>W tej serii przeprowadzimy restrukturyzacj\u0119, a w miar\u0119 post\u0119p\u00f3w w samouczku zobaczymy, o ile bardziej czytelny i kr\u00f3tszy b\u0119dzie nasz kod.<\/p>\n<h2>Rejestracja nowego bloku<\/h2>\n<p>W pakiecie <code>registerBlockType()<\/code>dost\u0119pna jest funkcja rejestracji nowego bloku niestandardowego. <code>wp.blocks<\/code>Przyjmuje dwa parametry; po pierwsze ci\u0105g z przestrzeni\u0105 nazw i nazw\u0105 bloku, a po drugie obiekt z pe\u0142n\u0105 konfiguracj\u0105 bloku.<\/p>\n<p>Gutenberg oczekuje, \u017ce wszystkie bloki b\u0119d\u0105 mia\u0142y przestrze\u0144 nazw i nazw\u0119 zdefiniowan\u0105 z uko\u015bnikiem pomi\u0119dzy nimi. Przestrze\u0144 nazw ma zapewni\u0107, \u017ce nazwa bloku nie b\u0119dzie kolidowa\u0107 z innymi blokami, kt\u00f3re mog\u0105 u\u017cywa\u0107 tej samej nazwy. Wszystkie bloki w WordPressie u\u017cywaj\u0105 przestrzeni nazw <code>core<\/code>. Na przyk\u0142ad standardowy blok akapitu w WordPressie ma nazw\u0119 <code>core\/paragraph<\/code>. Je\u015bli wybierzesz inn\u0105 przestrze\u0144 nazw, mo\u017cesz r\u00f3wnie\u017c utworzy\u0107 blok o nazwie akapit bez powodowania \u017cadnych problem\u00f3w.<\/p>\n<p>Wybierz unikaln\u0105 dla siebie przestrze\u0144 nazw wersji slugu. W tej serii u\u017cyj\u0119 przestrzeni nazw <code>awp<\/code>(kr\u00f3tkiej wersji A White Pixel).<\/p>\n<p>Otw\u00f3rz plik \u017ar\u00f3d\u0142owy, kt\u00f3ry stworzyli\u015bmy w ostatnim kroku; <code>src\/block-awhitepixel-myfirstblock.js<\/code>, w edytorze. Najpierw zadzwonimy <code>registerBlockType<\/code>z destructured <code>wp.blocks<\/code>, o nazwie <code>awp\/firstblock<\/code>. Dostosuj swoj\u0105 nazw\u0119 i przestrze\u0144 nazw na bie\u017c\u0105co.<\/p>\n<pre><code>const { registerBlockType } = wp.blocks;\n\u00a0\nregisterBlockType('awp\/firstblock', {\n    \/\/ Your block configuration and code here\n});<\/code><\/pre>\n<p>W drugim parametrze, obiekcie konfiguracji bloku, musimy zdefiniowa\u0107 kilka w\u0142a\u015bciwo\u015bci, aby zosta\u0142 pomy\u015blnie zarejestrowany. Pami\u0119taj, \u017ce konfiguracja bloku jest obiektem, co oznacza, \u017ce \u200b\u200bmusisz zapisa\u0107 wszystko jako pary klucz + warto\u015b\u0107, oddzielone przecinkiem. Istnieje wiele mo\u017cliwych w\u0142a\u015bciwo\u015bci konfiguracyjnych, wi\u0119c przejrzyjmy je, a na ko\u0144cu zobaczymy ostateczny kod.<\/p>\n<h3>Wymagane: tytu\u0142<\/h3>\n<p>Pierwsza wymagana w\u0142a\u015bciwo\u015b\u0107 to <code>title<\/code>. To jest nazwa, kt\u00f3ra pojawi si\u0119 po wybraniu mi\u0119dzy blokami. Ustaw t\u0119 w\u0142a\u015bciwo\u015b\u0107 jako dowoln\u0105 nazw\u0119, kt\u00f3r\u0105 chcesz w ci\u0105gu.<\/p>\n<p>Jako tytu\u0142 dodamy:<\/p>\n<pre><code>title: 'My first block',<\/code><\/pre>\n<p>PS: Przyjrzymy si\u0119 ponownie, jak piszemy wszystkie \u0142a\u0144cuchy w naszym bloku, aby upewni\u0107 si\u0119, \u017ce mo\u017cna je przet\u0142umaczy\u0107 w cz\u0119\u015bci 8. Ale na razie zachowamy prostot\u0119 i po prostu napiszemy \u0142a\u0144cuchy.<\/p>\n<h3>Wymagane: kategoria<\/h3>\n<p>W\u0142a\u015bciwo\u015b\u0107 <code>category<\/code>okre\u015bla, w kt\u00f3rej kategorii blok\u00f3w pojawi si\u0119 Tw\u00f3j blok po wybraniu blok\u00f3w do wstawienia w edytorze. Mo\u017cliwe warto\u015bci to <code>common<\/code>, <code>formatting<\/code>, <code>layout<\/code>, <code>widgets<\/code>, <code>embed<\/code>.<\/p>\n<p>Umie\u015b\u0107my to w <code>common<\/code>pierwszej kategorii blok\u00f3w.<\/p>\n<pre><code>category: 'common',<\/code><\/pre>\n<h3>Opcjonalnie: ikona<\/h3>\n<p>Je\u015bli korzysta\u0142e\u015b z Gutenberga, prawdopodobnie zauwa\u017cy\u0142e\u015b, \u017ce wszystkie bloki maj\u0105 ikony. Mo\u017cesz doda\u0107 ikon\u0119 do swojego bloku z ci\u0105giem, kt\u00f3ry odnosi si\u0119 do dowolnego z <a href=\"https:\/\/developer.wordpress.org\/resource\/dashicons\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dashikon\u00f3w WordPressa<\/a>, lub mo\u017cesz doda\u0107 niestandardowy <code>svg<\/code>element.<\/p>\n<p>Wybior\u0119 tylko jeden z dashikon\u00f3w WordPressa, <a href=\"https:\/\/developer.wordpress.org\/resource\/dashicons\/#smiley\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">bu\u017ak\u0119<\/a> \u2013 ale mo\u017cesz wybra\u0107 dowolny. Zauwa\u017c, \u017ce pomijasz dodawanie \u201edashicons-&quot; do nazwy klasy ikony.<\/p>\n<pre><code>icon: 'smiley',<\/code><\/pre>\n<h3>Opcjonalnie: opis<\/h3>\n<p>Mo\u017cesz poda\u0107 opis, kt\u00f3ry b\u0119dzie wy\u015bwietlany na pasku bocznym Ustawienia (po prawej stronie), gdy blok jest aktywny.<\/p>\n<p>Jako przyk\u0142ad dodam tylko kr\u00f3tki tekst:<\/p>\n<pre><code>description: 'Learning in progress',<\/code><\/pre>\n<h3>Opcjonalnie: s\u0142owa kluczowe<\/h3>\n<p>Gutenberg obs\u0142uguje funkcj\u0119 wyszukiwania przy wyborze typ\u00f3w blok\u00f3w. We w\u0142a\u015bciwo\u015bci mo\u017cna poda\u0107 tablic\u0119 mo\u017cliwych dopasowa\u0144 <code>keywords<\/code>. Bez <code>keywords<\/code>tego znalaz\u0142by\u015b sw\u00f3j blok, wyszukuj\u0105c jego nazw\u0119.<\/p>\n<p>Dodam <code>example<\/code>i <code>test<\/code>, aby\u015bmy mogli \u0142atwo znale\u017a\u0107 nasz niestandardowy blok, gdy zaczniemy wpisywa\u0107 jedno z tych s\u0142\u00f3w kluczowych.<\/p>\n<pre><code>keywords: ['example', 'test'],<\/code><\/pre>\n<h3>Opcjonalnie: atrybuty<\/h3>\n<p>W\u0142a\u015bciwo\u015b\u0107 <code>attributes<\/code>jest bardzo wa\u017cn\u0105 w\u0142a\u015bciwo\u015bci\u0105, do kt\u00f3rej b\u0119dziemy cz\u0119sto wraca\u0107 w tej serii samouczk\u00f3w. Tutaj przechowujesz swoje dane strukturalne i informacje wprowadzane przez u\u017cytkownika dla swojego bloku. Mo\u017cesz to sobie wyobrazi\u0107 jako zmienne. Na razie tego nie dodamy, ale na pewno nied\u0142ugo do tego wr\u00f3cimy.<\/p>\n<h3>(rodzaj) wymagane: edytuj i opcjonalnie: zapisz<\/h3>\n<p>W ramach w\u0142a\u015bciwo\u015bci <code>edit<\/code>i <code>save<\/code>w rzeczywisto\u015bci dodasz ca\u0142y kod zar\u00f3wno dla danych wyj\u015bciowych edytora, jak i dla renderowania frontendu. Obie te w\u0142a\u015bciwo\u015bci oczekuj\u0105 funkcji, kt\u00f3ra powinna zwr\u00f3ci\u0107 pewne dane wyj\u015bciowe.<\/p>\n<p>W\u0142a\u015bciwo\u015b\u0107 <code>edit<\/code>opisuje struktur\u0119 Twojego bloku w edytorze. W\u0142a\u015bciwo\u015b\u0107 <code>save<\/code>zasadniczo obs\u0142uguje dwie rzeczy; Twoje dane wyj\u015bciowe bloku w interfejsie u\u017cytkownika, ale tak\u017ce struktura tego, w jaki spos\u00f3b Tw\u00f3j blok jest zapisywany w bazie danych. B\u0119dziesz pracowa\u0107 g\u0142\u00f3wnie w <code>edit<\/code>tym miejscu, w kt\u00f3rym dodajesz dane wej\u015bciowe do wprowadzania lub wybierania rzeczy oraz aktualizowania danych bloku. Funkcja <code>save<\/code>nie powinna w \u017caden spos\u00f3b aktualizowa\u0107 ani edytowa\u0107 danych, powinna po prostu wyprowadza\u0107.<\/p>\n<p>Gutenberg musi by\u0107 w stanie zrekonstruowa\u0107 tw\u00f3j blok ze wszystkimi jego ustawieniami w edytorze na podstawie tego, co jest wyj\u015bciowe w <code>save<\/code>funkcji (i atrybutach). Je\u015bli Gutenberg kiedykolwiek otworzy post, w kt\u00f3rym poprzednio zapisane dane wyj\u015bciowe bloku r\u00f3\u017cni\u0105 si\u0119 (nawet nieznacznie) od tego, co zdefiniowano w zapisie, tw\u00f3j blok stanie si\u0119 niewa\u017cny.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151978-61e4d21609214.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151978-61e4d21609214.png\" alt=\"Utw\u00f3rz niestandardowy blok Gutenberga - Cz\u0119\u015b\u0107 2: Zarejestruj blok\" ><\/a><\/p>\n<p>Gwarantuj\u0119 Ci, \u017ce b\u0119dziesz si\u0119 z tym cz\u0119sto spotyka\u0107 podczas tworzenia niestandardowych blok\u00f3w. Kiedy tak si\u0119 stanie, musisz usun\u0105\u0107 blok (z kropek na pasku narz\u0119dzi) i doda\u0107 go ponownie. Polecam te\u017c zrobi\u0107 od\u015bwie\u017canie przegl\u0105darki (F5 lub CTRL+R).<\/p>\n<p>WordPress ma dedykowan\u0105 <a href=\"https:\/\/developer.wordpress.org\/block-editor\/developers\/block-api\/block-edit-save\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">stron\u0119 dokumentacji<\/a> dla funkcji edycji i zapisywania bloku, je\u015bli chcesz dowiedzie\u0107 si\u0119 wi\u0119cej.<\/p>\n<p>Je\u015bli chodzi o nasz pierwszy blok, wypiszmy co\u015b podstawowego. Zwr\u00f3cimy to samo dla obu <code>edit<\/code>i <code>save<\/code>; \u201e:)&#8221; zawini\u0119ty w <code>&lt;div&gt;<\/code>. Ikona bloku to w ko\u0144cu bu\u017aka.<\/p>\n<pre><code>edit:() =&gt; { \n    return &lt;div&gt;:)&lt;\/div&gt; \n},\nsave:() =&gt; { \n    return &lt;div&gt;:)&lt;\/div&gt; \n}<\/code><\/pre>\n<h3>Inne w\u0142a\u015bciwo\u015bci<\/h3>\n<p>Istnieje wi\u0119cej opcjonalnych w\u0142a\u015bciwo\u015bci dla <code>registerBlockType<\/code>; <code>parent<\/code>, <code>supports<\/code>, <code>transforms<\/code>, <code>example<\/code>, i <code>styles<\/code>. Na razie pominiemy je, poniewa\u017c wi\u0119kszo\u015b\u0107 z nich dotyczy bardziej zaawansowanego lub niestandardowego budowania blok\u00f3w. Je\u015bli chcesz dowiedzie\u0107 si\u0119 wi\u0119cej na ten temat, zapoznaj si\u0119 z <a href=\"https:\/\/developer.wordpress.org\/block-editor\/developers\/block-api\/block-registration\/#block-configuration\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dokumentacj\u0105 WordPressa<\/a>.<\/p>\n<h2>Kod bloku ko\u0144cowego rejestru<\/h2>\n<p>Nasz kod wygl\u0105da teraz mniej wi\u0119cej tak.<\/p>\n<pre><code>const { registerBlockType } = wp.blocks;\n\u00a0\nregisterBlockType('awp\/firstblock', {\n    title: 'My first block',\n    category: 'common',\n    icon: 'smiley',\n    description: 'Learning in progress',\n    keywords: ['example', 'test'],\n    edit: () =&gt; { \n        return &lt;div&gt;:)&lt;\/div&gt; \n    },\n    save: () =&gt; { \n        return &lt;div&gt;:)&lt;\/div&gt; \n    }\n});<\/code><\/pre>\n<p>Dzi\u0119ki temu mamy wystarczaj\u0105co du\u017co, aby nasz blok zosta\u0142 pomy\u015blnie zarejestrowany jako blok niestandardowy. Zobaczmy to w praktyce w edytorze Gutenberga.<\/p>\n<p>Czy pami\u0119ta\u0142e\u015b o skompilowaniu kodu JavaScript? W poprzednim kroku dowiedzieli\u015bmy si\u0119, \u017ce nie mo\u017cemy za\u0142adowa\u0107 tego pliku JavaScript do Gutenberga; potrzebujemy skompilowanej wersji. Zwykle rozwijasz si\u0119 <code>npm run start<\/code>dzia\u0142aj\u0105c w tle lub mo\u017cesz po prostu uruchomi\u0107 <code>npm run build<\/code>raz teraz. Powinno to skompilowa\u0107 nasz \u017ar\u00f3d\u0142owy Javascript i umie\u015bci\u0107 go w dowolnym miejscu, w kt\u00f3rym ma by\u0107 umieszczony i nazwany w pliku <code>webpack.config.js<\/code>.<\/p>\n<h2>Cz\u0119\u015b\u0107 PHP rejestracji bloku<\/h2>\n<p>Dla ka\u017cdego bloku musisz zarejestrowa\u0107 plik Javascript i jest to dok\u0142adnie to samo, co inne skrypty w WordPressie \u2013 u\u017cywaj\u0105c <code>[wp_register_script](https:\/\/developer.wordpress.org\/reference\/functions\/wp_register_script\/)()<\/code>. Zauwa\u017c, \u017ce rejestrujemy skrypt, a nie umieszczamy go w kolejce. Dzieje si\u0119 tak dlatego, \u017ce musimy r\u00f3wnie\u017c wywo\u0142a\u0107 funkcj\u0119 PHP, aby zarejestrowa\u0107 ka\u017cdy niestandardowy blok, a ta funkcja jest odpowiedzialna za kolejkowanie skryptu, gdy jest to potrzebne.<\/p>\n<p>Wol\u0119 trzyma\u0107 kod zwi\u0105zany z Gutenbergiem w osobnym pliku w moich motywach. Ale mo\u017cesz, i b\u0119dziemy w tym samouczku, po prostu napisa\u0107 ca\u0142y kod PHP bezpo\u015brednio w motywie <code>functions.php<\/code>dla uproszczenia.<\/p>\n<p>Zalecam u\u017cywanie <code>init<\/code>haka do swojej funkcji, a nie <code>enqueue_block_assets<\/code>. Mo\u017cemy po\u0142\u0105czy\u0107 zar\u00f3wno rejestracj\u0119 skryptu, jak i rejestracj\u0119 bloku.<\/p>\n<pre><code>add_action('init', function() {\n    wp_register_script('awp-myfirstblock-js', get_template_directory_uri(). '\/assets\/js\/gutenberg\/block-awhitepixel-myfirstblock.js');\n\u00a0\n    register_block_type('awp\/firstblock', [\n        'editor_script' =&gt; 'awp-myfirstblock-js',\n    ]);\n});<\/code><\/pre>\n<p>Funkcja PHP, kt\u00f3rej u\u017cyjemy do zarejestrowania nowego bloku to <code>[register_block_type](https:\/\/developer.wordpress.org\/reference\/functions\/register_block_type\/)()<\/code>. Podobnie jak Javascript <code>registerBlockType()<\/code>przyjmuje dwa parametry; przestrze\u0144 nazw i nazw\u0119 bloku oraz tablic\u0119 z argumentami. Upewnij si\u0119, \u017ce podajesz dok\u0142adnie tak\u0105 sam\u0105 przestrze\u0144 nazw i nazw\u0119 w PHP jak w JavaScript.<\/p>\n<p>W drugim argumencie jest kilka mo\u017cliwych argument\u00f3w (do niekt\u00f3rych wr\u00f3cimy w dalszej cz\u0119\u015bci tej serii). Ale najwa\u017cniejsz\u0105 z nich jest <code>editor_script<\/code>miejsce, w kt\u00f3rym podajesz uchwyt (pierwszy parametr <code>wp_register_script()<\/code>) zarejestrowanego skryptu.<\/p>\n<p>I to wszystko!<\/p>\n<h2>Nasz blok w edytorze Gutenberg<\/h2>\n<p>Teraz, gdy od\u015bwie\u017cysz edytor w jakim\u015b po\u015bcie, powiniene\u015b znale\u017a\u0107 nasz blok \u2013 albo otwieraj\u0105c kategori\u0119 Wsp\u00f3lne, albo wyszukuj\u0105c dowolne z podanych s\u0142\u00f3w kluczowych lub nazwy.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151978-61e4d216d1cdb.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151978-61e4d216d1cdb.png\" alt=\"Utw\u00f3rz niestandardowy blok Gutenberga - Cz\u0119\u015b\u0107 2: Zarejestruj blok\" ><\/a><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151978-61e4d217e1762.gif\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151978-61e4d217e1762.gif\" alt=\"Utw\u00f3rz niestandardowy blok Gutenberga - Cz\u0119\u015b\u0107 2: Zarejestruj blok\" ><\/a><\/p>\n<p>Nasz blok renderuje proste \u201e:)&#8221; zar\u00f3wno w edytorze, jak i we frontendzie. Na razie nie mo\u017cesz edytowa\u0107 niczego w bloku, ale tego nauczymy si\u0119 w kolejnych krokach!<\/p>\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 tej lekcji samouczka napiszemy JavaScript, aby zarejestrowa\u0107 nasz niestandardowy blok. Na koniec zarejestrujemy skrypt i wykonamy niezb\u0119dny kod PHP.<\/p>\n","protected":false},"author":1,"featured_media":151979,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[897,940,940,897,1110,815,845,845,866,866,815],"tags":[1169],"class_list":["post-233838","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kod","category-gutenberg-7","category-n-a","category-wtyczki","category-samouczki","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233838","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=233838"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233838\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/151979"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=233838"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=233838"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=233838"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}