{"id":230938,"date":"2022-12-24T13:15:00","date_gmt":"2022-12-24T10:15:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230938"},"modified":"2022-12-24T13:15:22","modified_gmt":"2022-12-24T10:15:22","slug":"narzedzia-do-pisania-lepszego-kodu-wordpress-kompozytor","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/narzedzia-do-pisania-lepszego-kodu-wordpress-kompozytor\/","title":{"rendered":"Narz\u0119dzia do pisania lepszego kodu WordPress: Kompozytor"},"content":{"rendered":"\n<p>Chocia\u017c uwa\u017cam, \u017ce tytu\u0142 tej serii i artyku\u0142y do \u200b\u200bka\u017cdej z nich s\u0105 wystarczaj\u0105co jasne, s\u0105 te\u017c inne rzeczy, kt\u00f3re zamierzam zrobi\u0107 z t\u0105 seri\u0105, w przeciwie\u0144stwie do innych serii, kt\u00f3re napisa\u0142em do tego momentu.<\/p>\n<p>W szczeg\u00f3lno\u015bci dwie rzeczy, kt\u00f3re pr\u00f3buj\u0119 zrobi\u0107, to dwie:<\/p>\n<ol>\n<li>ka\u017cdy artyku\u0142 powinien by\u0107 stosunkowo zwi\u0119z\u0142y (w por\u00f3wnaniu do poprzednich artyku\u0142\u00f3w),<\/li>\n<li>skoncentruj si\u0119 na jednej rzeczy na raz i postaraj si\u0119, aby jej opis by\u0142 kr\u00f3tki.<\/li>\n<\/ol>\n<p>Poniewa\u017c jest to tre\u015b\u0107 dla cz\u0142onk\u00f3w, nie mam nic przeciwko, aby by\u0142a nieco d\u0142u\u017csza ni\u017c zwykle, ale nie chc\u0119 te\u017c, aby by\u0142a tak d\u0142uga, \u017ce \u200b\u200btrudno j\u0105 \u015bledzi\u0107. Wola\u0142abym, \u017ceby by\u0142a to kr\u00f3tka lektura z czym\u015b praktycznym, co mo\u017cna wdro\u017cy\u0107 po przeczytaniu ka\u017cdego postu.<\/p>\n<p>Jedn\u0105 z rzeczy, kt\u00f3ra bardzo pomaga w pisaniu lepszego kodu WordPress, jest Composer.<\/p>\n<h2>Lepszy kod WordPress z Composer<\/h2>\n<p>Je\u015bli czytasz tego bloga od d\u0142u\u017cszego czasu, to wiesz, \u017ce jestem fanem Composera (jednak daleko mi do jedynej osoby pracuj\u0105cej w WordPressie).<\/p>\n<p>I chocia\u017c napisa\u0142em na ten temat troch\u0119 materia\u0142u, nie napisa\u0142em czego\u015b w konkretnym celu, \u017ceby\u015bcie z tym zacz\u0119li dzia\u0142a\u0107 przed przeczytaniem jednego, kr\u00f3tkiego artyku\u0142u.<\/p>\n<p>Do tego momentu b\u0119dziemy musieli p\u00f3j\u015b\u0107 na pewne kompromisy: Mianowicie, dostarcz\u0119 przyk\u0142adowy plik konfiguracyjny wraz ze sposobem na uporz\u0105dkowanie katalogu wtyczek. Nast\u0119pnie w nast\u0119pnym po\u015bcie wyja\u015bni\u0119 niekt\u00f3re funkcje Composera.<\/p>\n<h3>Co to jest kompozytor?<\/h3>\n<p>Po pierwsze, wa\u017cne jest, aby zrozumie\u0107, czym jest Composer. I \u0142atwo jest wyrecytowa\u0107 definicj\u0119 podan\u0105 na stronie, prawda? Jest to mened\u017cer zale\u017cno\u015bci dla PHP.<\/p>\n<h4>Ale najpierw, co to jest zale\u017cno\u015b\u0107?<\/h4>\n<p>Dla niekt\u00f3rych jednak rodzi si\u0119 kilka pyta\u0144:<\/p>\n<ul>\n<li>Co to jest zale\u017cno\u015b\u0107?<\/li>\n<li>Dlaczego musz\u0119 nimi zarz\u0105dza\u0107?<\/li>\n<\/ul>\n<p>A je\u015bli zag\u0142\u0119bisz si\u0119 nieco g\u0142\u0119biej, mo\u017ce si\u0119 okaza\u0107, \u017ce jest to mened\u017cer pakiet\u00f3w, a to po prostu nasuwa te same pytania, z wyj\u0105tkiem tego, \u017ce po prostu zast\u0119pujesz \u201ezale\u017cno\u015b\u0107&quot; \u201epakietem&#8221; i wracasz do miejsca, w kt\u00f3rym zacz\u0105\u0142e\u015b.<\/p>\n<p>Zrobi\u0119 wi\u0119c, co w mojej mocy, aby by\u0142o to jak najbardziej jasne:<\/p>\n<p>Zale\u017cno\u015b\u0107 lub pakiet, oprogramowanie u\u017cywane w kodzie. Mo\u017ce to by\u0107 co\u015b, na czym opiera si\u0119 funkcjonalno\u015b\u0107 w czasie wykonywania, na przyk\u0142ad <a href=\"http:\/\/docs.guzzlephp.org\/en\/stable\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">spos\u00f3b tworzenia \u017c\u0105da\u0144 HTTP<\/a>, lub mo\u017ce to by\u0107 biblioteka do konwersji <a href=\"https:\/\/github.com\/spatie\/array-to-xml\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tablic na XML<\/a>.<\/p>\n<p>Composer u\u0142atwia uwzgl\u0119dnienie tych konkretnych pakiet\u00f3w w Twojej bibliotece, umo\u017cliwiaj\u0105c:<\/p>\n<ul>\n<li>pobierz i do\u0142\u0105cz pakiet do swojej wtyczki,<\/li>\n<li>automatycznie \u0142aduje twoj\u0105 wtyczk\u0119 podczas dzia\u0142ania,<\/li>\n<li>u\u0142atwienie wtyczce tworzenia instancji lub wywo\u0142ywania wtyczki w razie potrzeby.<\/li>\n<\/ul>\n<p>Oznacza to, \u017ce nie musimy za\u015bmieca\u0107 katalog\u00f3w naszej bazy kodu wieloma r\u0119cznie dodanymi plikami, a to oznacza, \u017ce \u200b\u200bnie u\u017cywamy\u00a0 funkcji <strong>include<\/strong> ani <strong>require<\/strong> w ca\u0142ym miejscu.<\/p>\n<p>B\u0119d\u0105 one mia\u0142y swoje miejsce, kt\u00f3re om\u00f3wi\u0119 w nast\u0119pnym po\u015bcie, ale nie b\u0119d\u0105 musia\u0142y by\u0107 automatycznie instalowane. Zamiast tego b\u0119dzie nimi zarz\u0105dza\u0142 Composer. St\u0105d mened\u017cer zale\u017cno\u015bci cz\u0119\u015b\u0107 swojego celu.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/pisanie-lepszego-kodu-wordpress-wprowadzenie\/\" title=\"Teraz, gdy ju\u017c go zainstalowa\u0142e\u015b\">Teraz, gdy ju\u017c go zainstalowa\u0142e\u015b<\/a>, masz pewien kontekst.<\/p>\n<h3>Korzystanie z Kompozytora<\/h3>\n<p>Napisanie tej konkretnej sekcji jest nieco trudne, poniewa\u017c wszyscy mamy inne potrzeby, prawda? Ale przynajmniej wszyscy mo\u017cemy skorzysta\u0107 z automatycznego \u0142adowania.<\/p>\n<p>To co\u015b, z czego wszyscy mo\u017cemy skorzysta\u0107.<\/p>\n<p>Oto, co zrobi\u0119:<\/p>\n<ol>\n<li>Skonfiguruj\u0119 podstawowy katalog wtyczek,<\/li>\n<li>Utw\u00f3rz niezb\u0119dne pliki do obs\u0142ugi wtyczki,<\/li>\n<li>Skonfiguruj prosty plik Composera,<\/li>\n<li>Wykonaj to<\/li>\n<\/ol>\n<p>A potem poka\u017c\u0119 ci wyniki. Mo\u017cemy dosta\u0107 si\u0119 do bibliotek innych firm lub innych funkcji w przysz\u0142ym po\u015bcie (lub przysz\u0142ej serii, naprawd\u0119).<\/p>\n<p>Ale je\u015bli nic wi\u0119cej, to poka\u017ce ci, jak u\u017cy\u0107 Composera do zdefiniowania autoloadera, aby\u015b m\u00f3g\u0142 skupi\u0107 si\u0119 na pisaniu kodu, a nie na zastanawianiu si\u0119, czy klasy s\u0105 uwzgl\u0119dnione.<\/p>\n<h4>Katalog wtyczek<\/h4>\n<p>Generalnie struktury moich wtyczek wygl\u0105da nast\u0119puj\u0105co:<\/p>\n<ul>\n<li>jest plik bootstrap odczytywany przez WordPress,<\/li>\n<li>istnieje\u00a0 katalog <strong>src<\/strong>, w kt\u00f3rym przechowywane s\u0105 wszystkie katalogi i pliki PHP,<\/li>\n<li>istnieje\u00a0 katalog <strong>zasob\u00f3w<\/strong> najwy\u017cszego poziomu, w kt\u00f3rym przechowywane s\u0105 obrazy, pliki JavaScript i pliki Sass,<\/li>\n<li>i istnieje\u00a0 folder <strong>dostawcy<\/strong> utworzony przez Composer do przechowywania zale\u017cno\u015bci i autoloadera.<\/li>\n<\/ul>\n<p>Czasami mo\u017ce istnie\u0107 inny dziwny folder, taki jak folder <strong>inc<\/strong> lub <strong>lib<\/strong>, ale w tym momencie jest to bardzo nieregularne w rodzaju pracy, kt\u00f3r\u0105 wykonuj\u0119. I dlatego nie b\u0119d\u0119 si\u0119 tym przejmowa\u0107 w tym po\u015bcie.<\/p>\n<p>Zamiast tego m\u00f3j katalog wygl\u0105da mniej wi\u0119cej tak.<\/p>\n<p>Brak\u00a0 katalogu <strong>dostawcy<\/strong>, poniewa\u017c nie utworzy\u0142em jeszcze pliku Composer, kt\u00f3ry jest jeszcze u\u017cywany do wykonywania. Ale zobaczymy to przed ko\u0144cem postu.<\/p>\n<h4>Przyk\u0142adowe pliki<\/h4>\n<p>Pobierzmy przyk\u0142adowy plik ustawiony we wtyczce. A kiedy m\u00f3wi\u0119 pr\u00f3bka, mam r\u00f3wnie\u017c na my\u015bli proste.<\/p>\n<p>Ten plik b\u0119dzie mia\u0142 jeden cel: wydrukowanie wiadomo\u015bci na pulpicie po zalogowaniu si\u0119 do WordPressa.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160226-61e707e186b99.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-160226-61e707e186b99.png\" alt=\"Narz\u0119dzia do pisania lepszego kodu WordPress: Kompozytor\"><\/a><\/p>\n<p>Pami\u0119taj jednak, \u017ce celem tego nie jest pokazanie, jak napisa\u0107 dobrze zbudowan\u0105 wtyczk\u0119. Zamiast tego ma pokaza\u0107, jak wygenerowa\u0107 autoloader, aby pliki wtyczki by\u0142y generowane automatycznie.<\/p>\n<p>A wi\u0119c bootstrap wtyczki wygl\u0105da <a href=\"https:\/\/gist.github.com\/tommcfarlin\/94e25b3c6b304d348b8f4a69b03091fd#file-00-sample-plugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tak<\/a> :<\/p>\n<pre><code>&lt;?php\n\/**\n * The plugin bootstrap file\n *\n * This file is read by WordPress to generate the plugin information in the plugin\n * admin area. This file also includes all of the dependencies used by the plugin,\n * registers the activation and deactivation functions, and defines a function\n * that starts the plugin.\n *\n * @since             0.1.0\n * @package           SamplePlugin\n *\n * @wordpress-plugin\n * Plugin Name:       Sample Plugin\n * Description:       A sample plugin used for a blog post.\n * Version:           0.1.0\n * Author:            Tom McFarlin\n * Author URI:        https:\/\/tommcfarlin.com\n * License:           GPL-3.0+\n * License URI:       http:\/\/www.gnu.org\/licenses\/gpl-3.0.txt\n *\/\n\nnamespace SamplePlugin;\n\nuse SamplePluginMessenger;\n\n\/\/ This file called directly.\ndefined('WPINC') || die;\n\n\/\/ Include the autoloader.\nrequire_once __DIR__. '\/vendor\/autoload.php';\n\n\/\/ Start the machine.\n(new Messenger())-&gt;start();\n<\/code><\/pre>\n<p>A plik specjalnie odpowiedzialny za wy\u015bwietlanie wiadomo\u015bci wygl\u0105da <a href=\"https:\/\/gist.github.com\/tommcfarlin\/94e25b3c6b304d348b8f4a69b03091fd#file-01-messenger-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tak<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace SamplePlugin;\n\nclass Messenger\n{\n    \/**\n     * Subscribers the `adminNotices` function to the admin_notices hook in WordPress.\n     *\/\n    public function start()\n    {\n        add_action('admin_notices', [$this, 'adminNotices']);\n    }\n\n    \/**\n     * Displays the contents of the `message.html` file into the adminitrative notices\n     * area on the dashboard whenever the plugin is active.\n     *\/\n    public function adminNotices()\n    {\n        if ('dashboard' !== get_current_screen()-&gt;id) {\n            return;\n        }\n\n        include_once dirname(__FILE__). '\/Admin\/Views\/message.html';\n    }\n}\n<\/code><\/pre>\n<p>A je\u015bli interesuje Ci\u0119 plik HTML, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/94e25b3c6b304d348b8f4a69b03091fd#file-02-message-html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">jest on r\u00f3wnie\u017c prosty<\/a> :<\/p>\n<pre><code>&lt;div class=\"notice notice-success is-dismissible\"&gt;\n    &lt;p&gt;This is a message from the &lt;strong&gt;Sample Plugin&lt;\/strong&gt;&lt;\/p&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<p>M\u00f3wi\u0142em ci, \u017ce to proste.<\/p>\n<h4>Plik konfiguracyjny kompozytora<\/h4>\n<p>Ten konkretny plik mo\u017ce by\u0107 tak prosty lub tak skomplikowany, jak to konieczne. W tym po\u015bcie staramy si\u0119, aby by\u0142o to proste. Celem tego posta jest po prostu nadanie mu nazwy, opisu, licencji, autor\u00f3w, a nast\u0119pnie jak skonfigurowa\u0107 autoloader.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/94e25b3c6b304d348b8f4a69b03091fd#file-03-composer-json\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Zajrzyj tutaj<\/a>, a nast\u0119pnie wyja\u015bni\u0119, co widzisz tu\u017c pod nim:<\/p>\n<pre><code>{\n    \"name\": \"tommcfarlin\/sample-plugin\",\n    \"description\": \"A sample plugin used for a blog post.\",\n    \"type\": \"wordpress-plugin\",\n    \"license\": \"GPL-3.0-or-later\",\n    \"authors\": [\n      {\n        \"name\": \"Tom McFarlin\",\n        \"email\": \"tom@tommcfarlin.com\",\n        \"homepage\": \"https:\/\/tommcfarlin.com\"\n      }\n    ],\n      \"autoload\": {\n        \"psr-4\": {\n          \"SamplePlugin\": \"src\/\"\n        }\n      }\n  }<\/code><\/pre>\n<p>Po pierwsze, nazwa, opis, typ i licencja powinny by\u0107 \u0142atwe do zrozumienia. Obszar autorski r\u00f3wnie\u017c jest prosty.<\/p>\n<p>Martwimy si\u0119 teraz o automatyczne \u0142adowanie. Powinno by\u0107 ca\u0142kiem jasne.<\/p>\n<p>Kr\u00f3tko m\u00f3wi\u0105c, mamy dyrektyw\u0119 dla <strong>PSR4<\/strong>, o \u00a0kt\u00f3rej mo\u017cesz przeczyta\u0107 wi\u0119cej, a nast\u0119pnie gdzie znajduje si\u0119 przestrze\u0144 nazw. Tak wi\u0119c w powy\u017cszym przyk\u0142adzie wszystko w przestrzeni nazw <strong>SamplePlugin<\/strong> znajduje si\u0119 w <strong>src.\u00a0<\/strong><\/p>\n<p>To w\u0142a\u015bnie m\u00f3wi autoloaderowi, gdzie szuka\u0107 okre\u015blonych plik\u00f3w. A w naszym przypadku b\u0119dzie to po prostu szukanie klasy <strong>Messenger .<\/strong><\/p>\n<h4>Kompozytor biegaj\u0105cy<\/h4>\n<p>Teraz, gdy om\u00f3wili\u015bmy ju\u017c podstawy pliku konfiguracyjnego Composera, nadszed\u0142 czas, aby go uruchomi\u0107. Przypomnij sobie, \u017ce tw\u00f3j katalog wtyczek powinien wygl\u0105da\u0107 mniej wi\u0119cej tak:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160226-61e707e55e20b.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-160226-61e707e55e20b.png\" alt=\"Narz\u0119dzia do pisania lepszego kodu WordPress: Kompozytor\"><\/a><\/p>\n<p>W swoim terminalu wpisz <a href=\"https:\/\/gist.github.com\/tommcfarlin\/94e25b3c6b304d348b8f4a69b03091fd#file-04-run-composer-txt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nast\u0119puj\u0105ce polecenie<\/a> :<\/p>\n<p>Powiniene\u015b zobaczy\u0107 co\u015b takiego:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160226-61e707e92efb9.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-160226-61e707e92efb9.png\" alt=\"Narz\u0119dzia do pisania lepszego kodu WordPress: Kompozytor\"><\/a><\/p>\n<p>Zak\u0142adaj\u0105c, \u017ce wszystko posz\u0142o dobrze, powiniene\u015b by\u0107 w stanie zalogowa\u0107 si\u0119 do WordPressa i aktywowa\u0107 wtyczk\u0119.<\/p>\n<h4>Widz\u0105c to wszystko razem<\/h4>\n<p>Po aktywacji wtyczki mo\u017cesz przej\u015b\u0107 do pulpitu nawigacyjnego swojej witryny. Tam powiniene\u015b zobaczy\u0107 informacj\u0119 do odrzucenia, kt\u00f3ra wygl\u0105da dok\u0142adnie tak, jak widzieli\u015bmy na pocz\u0105tku postu:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160226-61e707e186b99.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-160226-61e707e186b99.png\" alt=\"Narz\u0119dzia do pisania lepszego kodu WordPress: Kompozytor\"><\/a><\/p>\n<p>Je\u015bli dotar\u0142e\u015b tak daleko, mo\u017cesz i\u015b\u0107! W przeciwnym razie sprawd\u017a dok\u0142adnie sk\u0142adni\u0119, aby upewni\u0107 si\u0119, \u017ce wszystko jest w porz\u0105dku. Je\u015bli co\u015b jest nie tak, prawdopodobnie nie by\u0142by\u015b w stanie zaj\u015b\u0107 tak daleko i zak\u0142adaj\u0105c, \u017ce masz ustawione podstawowe <a href=\"https:\/\/wordpress.mediadoma.com\/pl\/czytanie-i-zrozumienie-dziennikow-bledow-wordpress-czesc-1\/\" title=\"sta\u0142e debugowania\">sta\u0142e debugowania<\/a>, prawdopodobnie zobaczysz, gdzie wyst\u0119puje problem.<\/p>\n<h2>To nie wszystko<\/h2>\n<p>Composer oferuje znacznie wi\u0119cej i gor\u0105co polecam zapoznanie si\u0119 z jego dokumentacj\u0105. Niekt\u00f3re z nich om\u00f3wi\u0119, patrz\u0105c na narz\u0119dzia, kt\u00f3re planuj\u0119 om\u00f3wi\u0107 w dalszej cz\u0119\u015bci tej serii, ale na razie polecam zapozna\u0107 si\u0119 z niekt\u00f3rymi konwencjami.<\/p>\n<p>Oh! I nie polecam sprawdzania katalogu dostawc\u00f3w w twoim repozytorium. Mo\u017ce to sta\u0107 si\u0119 p\u00f3\u017aniej ogromnym katalogiem i mo\u017ce podwa\u017cy\u0107 ca\u0142y cel Composera.<\/p>\n<p>W nast\u0119pnym po\u015bcie opowiem dlaczego. Niekt\u00f3rzy to robi\u0105, i to jest w porz\u0105dku, robi\u0142em to ju\u017c wcze\u015bniej, ale wa\u017cne jest, aby by\u0107 rozs\u0105dnym, kiedy to robisz.<\/p>\n<p>Err po stronie nie robienia tego. A dlaczego wyja\u015bni\u0119 w nast\u0119pnym po\u015bcie.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bardzo podstawowe wprowadzenie do Composera wyja\u015bniaj\u0105ce jego przeznaczenie i spos\u00f3b wykorzystania go, aby skorzysta\u0107 z automatycznego \u0142adowania.<\/p>\n","protected":false},"author":1,"featured_media":236343,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,897,866],"tags":[1169],"class_list":["post-230938","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-kod","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230938","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=230938"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230938\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/236343"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=230938"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=230938"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=230938"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}