{"id":228860,"date":"2022-11-04T11:39:00","date_gmt":"2022-11-04T08:39:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228860"},"modified":"2022-11-09T04:35:58","modified_gmt":"2022-11-09T01:35:58","slug":"szybkie-prototypowanie-prototypowanie-do-kodu-czesc-2","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/szybkie-prototypowanie-prototypowanie-do-kodu-czesc-2\/","title":{"rendered":"Szybkie prototypowanie: Prototypowanie do kodu, cz\u0119\u015b\u0107 2"},"content":{"rendered":"\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/szybkie-prototypowanie-prototypowanie-do-kodu-czesc-1\/\" title=\"Poprzedni post\" >Poprzedni post<\/a> demonstruje du\u017co pracy przy przejmowaniu czego\u015b, co kiedy\u015b by\u0142o szybkim prototypem, i przejmowaniu tego prototypu do kodu. Je\u015bli nie \u015bledzi\u0142e\u015b dalej, zrobili\u015bmy nast\u0119puj\u0105ce rzeczy:<\/p>\n<ol>\n<li>om\u00f3wi\u0142em i zbudowa\u0142em prototyp wtyczki,<\/li>\n<li>schematycznie jedno podej\u015bcie obiektowe mo\u017ce dzia\u0142a\u0107,<\/li>\n<li>i refaktoryzacji naszego prototypu do rzeczywistego kodu.<\/li>\n<\/ol>\n<p>W tym momencie jest jeszcze kilka rzeczy, kt\u00f3re mo\u017cemy zrobi\u0107, aby ulepszy\u0107 nasz kod. Mianowicie mo\u017cemy wprowadzi\u0107 poj\u0119cie przestrzeni nazw. To przenosi organizacj\u0119 o krok dalej i mo\u017ce wyp\u0142aca\u0107 dywidendy za wi\u0119ksze projekty.<\/p>\n<p>Oto wi\u0119c, jak to wygl\u0105da w naszym obecnym projekcie.<\/p>\n<h2>Prototyp do kodu: przestrzenie nazw<\/h2>\n<p>W poprzednich postach szczeg\u00f3\u0142owo om\u00f3wi\u0142em przestrzenie nazw. Je\u015bli nie czyta\u0142e\u015b, <a href=\"https:\/\/wordpress.mediadoma.com\/pl\/przestrzenie-nazw-i-automatyczne-ladowanie-w-wordpress\/\" title=\"polecam\" >polecam<\/a>. Nast\u0119pnie wr\u00f3\u0107 i sprawd\u017a reszt\u0119 postu.<\/p>\n<p>Je\u015bli zdecydujesz si\u0119 pomin\u0105\u0107 ten artyku\u0142, oto <a href=\"https:\/\/php.net\/manual\/en\/language.namespaces.rationale.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kr\u00f3tka definicja przestrzeni nazw<\/a> :<\/p>\n<blockquote>\n<p>Przestrzenie nazw maj\u0105 na celu rozwi\u0105zanie dw\u00f3ch problem\u00f3w, kt\u00f3re napotykaj\u0105 autorzy bibliotek i aplikacji podczas tworzenia element\u00f3w kodu wielokrotnego u\u017cytku, takich jak klasy lub funkcje\u2026<\/p>\n<\/blockquote>\n<p>Og\u00f3ln\u0105 ide\u0105 jest to, \u017ce organizujemy nasze zaj\u0119cia w oparciu o logiczn\u0105 relacj\u0119, jak\u0105 maj\u0105 ze sob\u0105.<\/p>\n<p>Ponadto organizujemy r\u00f3wnie\u017c pliki w katalogach, kt\u00f3re pasuj\u0105 do przestrzeni nazw. Nie jest to co\u015b, co trzeba zrobi\u0107, ale uwa\u017cam, \u017ce pomocne jest logiczne uporz\u0105dkowanie klas na dysku w taki spos\u00f3b, w jaki s\u0105 wirtualnie zorganizowane w przestrzeni nazw.<\/p>\n<p>Powiedziawszy to, uporz\u0105dkujmy pliki.<\/p>\n<h3>Organizowanie plik\u00f3w<\/h3>\n<p>Zamiast zaczyna\u0107 od g\u0142\u00f3wnego pliku wtyczki, zacznijmy od uporz\u0105dkowania naszych plik\u00f3w.<\/p>\n<ul>\n<li>Pliki Meta Box i Meta Box Display b\u0119d\u0105 znajdowa\u0107 si\u0119 w katalogu o nazwie <strong>Display<\/strong>. Jest to ca\u0142kowicie arbitralne, ale poniewa\u017c tak robi\u0105 te pliki, wydaje si\u0119 sensowne, \u017ce w\u0142a\u015bnie tam si\u0119 znajduj\u0105.<\/li>\n<li>Mo\u017cemy r\u00f3wnie\u017c umie\u015bci\u0107 w tym katalogu pliki <strong>message-description.php<\/strong> i <strong>no-post-list.php<\/strong>, ale umie\u015b\u0107my je w podkatalogu o nazwie <strong>Views<\/strong>. Mo\u017cesz nazwa\u0107 to <strong>Szablony<\/strong> lub <strong>Cz\u0119\u015bciowe<\/strong> lub w podobny spos\u00f3b.<\/li>\n<li>Nast\u0119pnie mamy klasy odpowiedzialne za odpytywanie bazy danych oraz klas\u0119 odpowiedzialn\u0105 za koordynacj\u0119 przesy\u0142ania komunikat\u00f3w. Umie\u015b\u0107my ka\u017cdy z nich w <strong>Utility.<\/strong> Oczywi\u015bcie, s\u0105 inne miejsca, do kt\u00f3rych mog\u0105 si\u0119 uda\u0107, ale pami\u0119taj, \u017ce ich celem jest zademonstrowanie, jak u\u017cywa\u0107 przestrzeni nazw. Wi\u0119c je\u015bli masz ochot\u0119, mo\u017cesz dostosowa\u0107 swoje pliki do w\u0142asnych upodoba\u0144.<\/li>\n<\/ul>\n<p>Je\u015bli \u015bledzi\u0142e\u015b to, co mamy powy\u017cej, powiniene\u015b mie\u0107 struktur\u0119 katalog\u00f3w, kt\u00f3ra wygl\u0105da mniej wi\u0119cej tak:<\/p>\n<p>Jeden ze sposob\u00f3w organizowania plik\u00f3w.<\/p>\n<p>Teraz nadszed\u0142 czas na zdefiniowanie przestrzeni nazw dla ka\u017cdej z klas. Poniewa\u017c zorganizowali\u015bmy je wszystkie w ich katalogach, \u0142atwo b\u0119dzie okre\u015bli\u0107 przestrze\u0144 nazw; jednak wa\u017cne jest, aby pami\u0119ta\u0107, \u017ce b\u0119dziemy musieli <strong><a href=\"https:\/\/php.net\/manual\/en\/language.namespaces.importing.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">u\u017cy\u0107 s\u0142owa kluczowego use<\/a><\/strong>, gdy u\u017cywamy klas znajduj\u0105cych si\u0119 w innych przestrzeniach nazw.<\/p>\n<p>Przejrzyjmy ka\u017cdy z naszych plik\u00f3w, zaczynaj\u0105c od plik\u00f3w w <strong>Utility<\/strong>. Najpierw zaczniemy od <a href=\"https:\/\/gist.github.com\/tommcfarlin\/38c72277ddbd0fa70a74c03598070703#file-00-post-messenger-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Post Messenger<\/a> :<\/p>\n<pre><code>&lt;?php\n\/**\n * Display content for the meta box when requested.\n *\n * @author Tom McFarlin\n * @since  0.2.0\n *\/\n\nnamespace McFarlinTRPUtility;\nuse McFarlinTRPUtilityPost_Query;\n\n\/**\n * Retrieves information from the class responsible for querying the database and\n * renders it in the context of our meta box when called via the Meta Box Display.\n *\n * @author Tom McFarlin\n * @since  0.2.0\n *\/\nclass Post_Messenger {\n  \/\/ Snip for brevity. \n}<\/code><\/pre>\n<p>Zauwa\u017cysz, \u017ce przestrze\u0144 nazw pliku pojawia si\u0119 w nag\u0142\u00f3wku wraz z deklaracj\u0105 u\u017cycia utworzonej przez nas klasy <strong>Post Query .<\/strong> Do\u0142\u0105czy\u0142em nazw\u0119 klasy na ko\u0144cu przestrzeni nazw, wi\u0119c nie musz\u0119 jej u\u017cywa\u0107 w ca\u0142ym kodzie.<\/p>\n<p>Zauwa\u017c, \u017ce konstruktor wygl\u0105da teraz <a href=\"https:\/\/gist.github.com\/tommcfarlin\/38c72277ddbd0fa70a74c03598070703#file-01-post-messenger-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tak<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Instantiates the class by setting a reference to the query.\n *\n * @param string $plugin_dir The path to the root of the plugin directory.\n *\/\npublic function __construct( $plugin_dir) {\n\n    $this-&gt;query      = new Post_Query();\n    $this-&gt;plugin_dir = trailingslashit( $plugin_dir );\n}<\/code><\/pre>\n<p>Doda\u0142em\u00a0 argument <strong>$plugin_dir<\/strong>, poniewa\u017c musimy go u\u017cy\u0107, aby poprawnie wy\u015bwietli\u0107 wyniki zapytania. A poniewa\u017c znajduj\u0105 si\u0119 teraz w innym obszarze aplikacji, funkcje wygl\u0105daj\u0105 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/38c72277ddbd0fa70a74c03598070703#file-02-post-messenger-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tak<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Displays the description of the content of the meta box.\n *\n * @access private\n *\/\nprivate function get_post_message() {\n    include_once $this-&gt;plugin_dir. 'Display\/Views\/post-list.php';\n}\n\n\/**\n * Displays the description of the content of the meta box.\n *\n * @access private\n *\/\nprivate function get_description() {\n    include_once $this-&gt;plugin_dir. 'Display\/Views\/message-description.php';\n}\n\n\/**\n * Displays a message of there are no recent posts.\n *\n * @access private\n *\/\nprivate function get_no_posts_message() {\n    include_once $this-&gt;plugin_dir. 'Display\/Views\/no-post-list.php';\n}<\/code><\/pre>\n<p>Nast\u0119pnie sp\u00f3jrzmy na klas\u0119 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/38c72277ddbd0fa70a74c03598070703#file-03-post-query-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Post Query .<\/a> W tej klasie niewiele si\u0119 zmieni\u0142o, z wyj\u0105tkiem tego, \u017ce nadali\u015bmy jej przestrze\u0144 nazw, a tak\u017ce zaktualizowali\u015bmy zapytanie tylko po to, aby wycofa\u0107 trzy posty (jak w <a href=\"https:\/\/tommcfarlin.com\/prototype-to-code-1\/#comment-911828\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tym komentarzu<\/a> ).<\/p>\n<pre><code>&lt;?php\n\nnamespace McFarlinTRPUtility;\n\n\/**\n * Queries the database for three most recent posts. Returns the query to the\n * caller so that it can be interrogates for posts or not.\n *\n * @author Tom McFarlin\n * @since  0.2.0\n *\/\nclass Post_Query {\n\n  \/\/ Snip for brevity.\n\n    private function get_posts() {\n\n        $args = array(\n            'post_type'        =&gt; 'post',\n            'post_status'      =&gt; 'publish',\n            'posts_per_page' =&gt; 3,\n            'orderby'          =&gt; 'date',\n            'order'            =&gt; 'desc',\n        );\n        $this-&gt;query = new WP_Query( $args );\n\n        return $this-&gt;query;\n    }\n}<\/code><\/pre>\n<p>Zauwa\u017c w kodzie, \u017ce doda\u0142em r\u00f3wnie\u017c <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">prefiks WP_Query<\/a> z uko\u015bnikiem, poniewa\u017c jest to cz\u0119\u015b\u0107 globalnej przestrzeni nazw.<\/p>\n<p>Przejd\u017amy do\u00a0 katalogu <strong>Display<\/strong> i przyjrzyjmy si\u0119 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/38c72277ddbd0fa70a74c03598070703#file-04-meta-box-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">klasie Meta Box<\/a>. To r\u00f3wnie\u017c otrzyma\u0142o przestrze\u0144 nazw i u\u017cywa w pe\u0142ni kwalifikowanej nazwy\u00a0 klasy <strong>Meta Box Display<\/strong>, kt\u00f3rej przyjrzymy si\u0119 za chwil\u0119.<\/p>\n<pre><code>&lt;?php\n\n namespace McFarlinTRPDisplay;\n use McFarlinTRPDisplayMeta_Box_Display;\n\n\/**\n * Registers the Meta Box with WordPress. Defines the ID, title, display function,\n * and the post type on which it will live.\n *\n * @author Tom McFarlin\n * @since  0.2.0\n *\/\nclass Meta_Box {\n\n    \/**\n     * A reference to the class that will display the contents in the meta box.\n     *\n     * @access private\n     * @var    Meta_Box_Display\n     *\/\n    private $meta_box_display;\n\n    \/**\n     * Instantiates the class by setting its property equal to a reference to its display.\n     *\n     * @param string $plugin_dir A reference to the root of the plugin's directory.\n     *\/\n    public function __construct( $plugin_dir) {\n        $this-&gt;meta_box_display = new Meta_Box_Display( $plugin_dir );\n    }\n\n    \/\/ Snip for brevity.\n}<\/code><\/pre>\n<p>Zauwa\u017c, \u017ce ten konstruktor r\u00f3wnie\u017c akceptuje katalog wtyczek jako argument i przekazuje go r\u00f3wnie\u017c do\u00a0 klasy <strong>Meta Box Display<\/strong>. Dzi\u0119ki temu funkcje odpowiedzialne za wy\u015bwietlanie komunikat\u00f3w mo\u017cna poprawnie znale\u017a\u0107 w ich lokalizacji w\u00a0 katalogu <strong>Views<\/strong>.<\/p>\n<p>Na koniec przyjrzyjmy si\u0119\u00a0 klasie <strong>Meta Box Display<\/strong>. Jest to prosta klasa, kt\u00f3ra zawiera przestrze\u0144 nazw i odwo\u0142uje si\u0119 do <strong>Post Messengera<\/strong>, kt\u00f3ry om\u00f3wili\u015bmy powy\u017cej.<\/p>\n<pre><code>&lt;?php\n\/**\n * Defines the display for the meta box.\n *\n * @author Tom McFarlin\n * @since  0.2.0\n *\/\n\nnamespace McFarlinTRPDisplay;\nuse McFarlinTRPUtilityPost_Messenger;\n\n\/**\n * Defines the display for the meta box that will render the content in the\n * context of its meta box.\n *\n * @author Tom McFarlin\n * @since  0.2.0\n *\/\nclass Meta_Box_Display {\n\n    \/**\n     * A reference to the class that will display the contents in the meta box.\n     *\n     * @access private\n     * @var    Post_Messenger\n     *\/\n    private $messenger;\n\n    \/**\n     * Instantiates the object by setting a property equal to that of the class\n     * responsible for rendering the messages from the post query.\n     *\n     * @param string $plugin_dir A reference to the root of the plugin's directory.\n     *\/\n    public function __construct( $plugin_dir) {\n        $this-&gt;messenger = new Post_Messenger( $plugin_dir );\n    }\n\n    \/**\n     * If there are posts to display, renders them in the metabox. Otherwise, displays\n     * a note that there are no posts to display.\n     *\/\n    public function display() {\n        $this-&gt;messenger-&gt;get_message();\n    }\n}\n<\/code><\/pre>\n<p>W tym momencie zatoczyli\u015bmy pe\u0142ne ko\u0142o przez wtyczk\u0119. Z jednym wyj\u0105tkiem: plik \u0142aduj\u0105cy. Dodali\u015bmy do niego przestrze\u0144 nazw i musimy zaktualizowa\u0107 spos\u00f3b <a href=\"https:\/\/gist.github.com\/tommcfarlin\/38c72277ddbd0fa70a74c03598070703#file-06-bootstrap-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">jej tworzenia<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace McFarlinTRP;\nuse McFarlinTRPDisplayMeta_Box;\n\ninclude 'Display\/class-meta-box.php';\ninclude 'Display\/class-meta-box-display.php';\ninclude 'Utility\/class-post-messenger.php';\ninclude 'Utility\/class-post-query.php';\n\nadd_action( 'add_meta_boxes', __NAMESPACE__. 'trp_start' );\n\/**\n * Starts the plugin.\n *\/\nfunction trp_start() {\n\n    $meta_box = new Meta_Box( dirname( __FILE__) );\n    $meta_box-&gt;init();\n}<\/code><\/pre>\n<p>Mianowicie mamy:<\/p>\n<ul>\n<li>zdefiniowa\u0142 przestrze\u0144 nazw,<\/li>\n<li>odwo\u0142a\u0107 si\u0119 do lokalizacji\u00a0 klasy <strong>Meta Box<\/strong> ,<\/li>\n<li>zaktualizowa\u0142em \u015bcie\u017cki, aby uwzgl\u0119dni\u0107 gdzie znale\u017a\u0107 pliki (co docelowo mo\u017cna zrobi\u0107 za pomoc\u0105 autoloadera),<\/li>\n<li>i zaktualizowa\u0142em wywo\u0142anie <strong>add_action .<\/strong><\/li>\n<\/ul>\n<p>Oto kwestia wywo\u0142ania akcji add: Poniewa\u017c WordPress musi zlokalizowa\u0107 t\u0119 funkcj\u0119, a funkcja znajduje si\u0119 w przestrzeni nazw, w pe\u0142ni kwalifikowana nazwa funkcji musi zosta\u0107 zidentyfikowana, aby WordPress m\u00f3g\u0142 j\u0105 wywo\u0142a\u0107. St\u0105d potrzeba <strong><a href=\"https:\/\/php.net\/manual\/en\/language.namespaces.nsconstants.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">NAMESPACE<\/a><\/strong> w nazwie funkcji.<\/p>\n<h2>Teraz jeste\u015bmy zorganizowani (z jednym wyj\u0105tkiem)<\/h2>\n<p>Jak wida\u0107, pasuj\u0105ce do nich przestrzenie nazw i katalogi dodaj\u0105 du\u017co organizacji do projektu. \u0141atwiej jest \u015bledzi\u0107, \u0142atwiej zrozumie\u0107, dok\u0105d zmierzaj\u0105 rzeczy (zar\u00f3wno w przypadku istniej\u0105cych, jak i nowych plik\u00f3w). I daje mniej wra\u017cenia, gdy gromadzi si\u0119 wiele plik\u00f3w w jednym miejscu.<\/p>\n<p>Nawet je\u015bli klasa jest troch\u0119 monolitem, nadal mo\u017cna j\u0105 zorganizowa\u0107 w taki spos\u00f3b, aby u\u0142atwi\u0107 konserwacj\u0119.<\/p>\n<p>Maj\u0105c to na uwadze, wci\u0105\u017c jest co\u015b, co chcia\u0142bym zmieni\u0107 w tej wtyczce: przekazywanie katalogu wtyczki w ten spos\u00f3b nie jest czym\u015b, co pomaga przy niskiej sp\u00f3jno\u015bci i \u015bci\u015blej \u0142\u0105czy klasy, poniewa\u017c plik \u0142adowania pocz\u0105tkowego musi przekaza\u0107 warto\u015b\u0107 do jedna klasa, kt\u00f3ra przekazuje go do innej klasy, kt\u00f3ra u\u017cywa go do \u0142adowania plik\u00f3w i tak dalej.<\/p>\n<p>Czy s\u0105 wi\u0119c sposoby, aby to naprawi\u0107? Absolutnie. I by\u0107 mo\u017ce przyjrzymy si\u0119 temu w ostatnim po\u015bcie.<\/p>\n<p>Do tego czasu pami\u0119taj, \u017ce najnowsza wersja wtyczki jest dost\u0119pna <a href=\"https:\/\/github.com\/tommcfarlin\/three-recent-posts\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">w ga\u0142\u0119zi master, oznaczona jako 0.3.0, na GitHub<\/a>.<\/p>\n<h2>Posty z serii<\/h2>\n<ol>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/szybkie-prototypowanie-z-wordpress-od-koncepcji-do-wtyczki\/\" title=\"Szybkie prototypowanie z WordPress: od koncepcji do wtyczki\">Szybkie prototypowanie z WordPress: od koncepcji do wtyczki<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/szybkie-prototypowanie-z-wordpress-analiza-koncepcji\/\" title=\"Szybkie prototypowanie z WordPress: analiza koncepcji\">Szybkie prototypowanie z WordPress: analiza koncepcji<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/szybkie-prototypowanie-prototypowanie-do-kodu-czesc-1\/\" title=\"Szybkie prototypowanie: Prototypowanie do kodu, cz\u0119\u015b\u0107 1\">Szybkie prototypowanie: Prototypowanie do kodu, cz\u0119\u015b\u0107 1<\/a><\/li>\n<li><a href=\"https:\/\/tommcfarlin.com\/prototype-to-code-2\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Szybkie prototypowanie: Prototypowanie do kodu, cz\u0119\u015b\u0107 2<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/szybkie-prototypowanie-przedstawiamy-automatyczne-ladowanie\/\" title=\"Szybkie prototypowanie: Przedstawiamy automatyczne \u0142adowanie\">Szybkie prototypowanie: Przedstawiamy automatyczne \u0142adowanie<\/a><\/li>\n<\/ol>\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>Kontynuuj\u0105c wysi\u0142ki zmierzaj\u0105ce do przej\u015bcia od prototypu do kodu, wezm\u0119 wtyczk\u0119 w toku i zaimplementuj\u0119 interfejsy dla organizacji.<\/p>\n","protected":false},"author":1,"featured_media":223922,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,919,845],"tags":[1169],"class_list":["post-228860","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-inny","category-samouczki","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228860","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=228860"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228860\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/223922"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=228860"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=228860"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=228860"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}