{"id":233448,"date":"2023-02-14T14:38:00","date_gmt":"2023-02-14T11:38:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233448"},"modified":"2022-11-10T23:45:14","modified_gmt":"2022-11-10T20:45:14","slug":"utworz-niestandardowy-blok-gutenberga-czesc-6-paski-narzedzi","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/utworz-niestandardowy-blok-gutenberga-czesc-6-paski-narzedzi\/","title":{"rendered":"Utw\u00f3rz niestandardowy blok Gutenberga &#8211; cz\u0119\u015b\u0107 6: paski narz\u0119dzi"},"content":{"rendered":"\n<p>W tym po\u015bcie dowiemy si\u0119, jak doda\u0107 paski narz\u0119dzi WordPressa do naszego bloku, tj. do wyr\u00f3wnania i wyr\u00f3wnania blok\u00f3w. Nauczymy si\u0119 r\u00f3wnie\u017c dodawa\u0107 w\u0142asne paski narz\u0119dzi z w\u0142asnymi przyciskami do wykonywania niestandardowych akcji.<\/p>\n<h2>Dodawanie pask\u00f3w narz\u0119dzi<\/h2>\n<p>Aby doda\u0107 co\u015b do paska narz\u0119dzi naszego bloku, musimy umie\u015bci\u0107 to, co chcemy w nim w komponencie o nazwie <code>BlockControls<\/code>(from <code>wp.blockEditor<\/code>). Wewn\u0105trz tego komponentu mo\u017cemy doda\u0107 jeden z komponent\u00f3w WordPress dla standardowych pask\u00f3w narz\u0119dzi, kt\u00f3re znamy z innych blok\u00f3w (na przyk\u0142ad wyr\u00f3wnanie) lub mo\u017cemy doda\u0107 w\u0142asny pasek narz\u0119dzi.<\/p>\n<p>Domy\u015blnie blok b\u0119dzie posiada\u0142 pasek narz\u0119dzi zawieraj\u0105cy tylko ikon\u0119 bloku (dla funkcji Przekszta\u0142\u0107 w) oraz menu bloku do np. usuni\u0119cia bloku. Nie mo\u017cemy ich usun\u0105\u0107, ale mo\u017cemy doda\u0107 mi\u0119dzy nimi w\u0142asne przyciski i paski narz\u0119dzi.<\/p>\n<p>Jednak niekt\u00f3re komponenty WordPressa same dodadz\u0105 w\u0142asne paski narz\u0119dzi. W tej chwili nasz blok pokazuje pasek narz\u0119dzi do formatowania tekstu, kt\u00f3ry pochodzi z <code>RichText<\/code>komponentu, kt\u00f3ry dodali\u015bmy.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153353-61e50c7785e80.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-153353-61e50c7785e80.png\" alt=\"Utw\u00f3rz niestandardowy blok Gutenberga - cz\u0119\u015b\u0107 6: paski narz\u0119dzi\" ><\/a><\/p>\n<h2>Dodawanie paska narz\u0119dzi wyr\u00f3wnania blok\u00f3w<\/h2>\n<p>Pasek wyr\u00f3wnywania blok\u00f3w istnieje praktycznie we wszystkich typach blok\u00f3w WordPress, wi\u0119c dodajmy go r\u00f3wnie\u017c do naszego bloku. Za kulisami istnieje komponent <code>BlockAlignmentToolbar<\/code>, kt\u00f3ry mogliby\u015bmy doda\u0107, jednak nie polecam tego. Korzystanie z niego wymaga r\u0119cznej obs\u0142ugi klas w celu wyr\u00f3wnania blok\u00f3w i upewnienia si\u0119, \u017ce blok rozszerza swoj\u0105 szeroko\u015b\u0107 w edytorze po wybraniu opcji \u201eSzeroka szeroko\u015b\u0107&quot; lub \u201ePe\u0142na szeroko\u015b\u0107&#8221;. Na szcz\u0119\u015bcie WordPress bardzo u\u0142atwi\u0142 jego implementacj\u0119, w pe\u0142ni automatycznie.<\/p>\n<p>PS: Aktywny motyw musi aktywnie doda\u0107 obs\u0142ug\u0119 motywu dla tych dw\u00f3ch wyr\u00f3wna\u0144 blok\u00f3w. Mo\u017cesz doda\u0107 wsparcie dla tych, maj\u0105c <code>add_theme_support('align-wide')<\/code>w <code>after_setup_theme<\/code>haczyku.<\/p>\n<p>Mo\u017cemy doda\u0107 do naszej konfiguracji obiektu now\u0105 w\u0142a\u015bciwo\u015b\u0107 o <code>registerBlockType()<\/code>nazwie <code>supports<\/code>. Istnieje kilka innych funkcji, ale to, co nas tutaj interesuje, to <code>align<\/code>. Mo\u017cemy albo ustawi\u0107 <code>align<\/code>, aby <code>true<\/code>doda\u0107 wszystkie mo\u017cliwe wyr\u00f3wnania, albo mo\u017cemy dostarczy\u0107 tablic\u0119 dok\u0142adnych wyr\u00f3wna\u0144, kt\u00f3re dopuszczamy dla naszego bloku.<\/p>\n<pre><code>...\nregisterBlockType('awp\/firstblock', {\n    ...\n    supports: {\n        align: true\n    },\n    edit: (props) =&gt; {\n        ...\n});<\/code><\/pre>\n<p>Co daje nam to w edytorze:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153353-61e50c7967acd.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-153353-61e50c7967acd.png\" alt=\"Utw\u00f3rz niestandardowy blok Gutenberga - cz\u0119\u015b\u0107 6: paski narz\u0119dzi\" ><\/a><\/p>\n<p>Je\u015bli chcesz, na przyk\u0142ad, uniemo\u017cliwi\u0107 komukolwiek korzystanie z szerokiej lub pe\u0142nej szeroko\u015bci, mo\u017cesz poda\u0107 tablic\u0119 i wykluczy\u0107 te dwa. Nazwy linii trasowania blok\u00f3w s\u0105 nast\u0119puj\u0105ce: <code>left<\/code>, <code>right<\/code>, <code>center<\/code>, <code>wide<\/code>i <code>full<\/code>.<\/p>\n<pre><code>supports: {\n    align: ['left', 'right', 'center']\n},<\/code><\/pre>\n<h3>Potrzebujesz domy\u015blnego wyr\u00f3wnania?<\/h3>\n<p>Domy\u015blnie blok nie otrzymuje wyr\u00f3wnania bloku. Je\u015bli chcesz, mo\u017cesz ustawi\u0107 warto\u015b\u0107 domy\u015bln\u0105, tworz\u0105c atrybut za pomoc\u0105 klawisza <code>align<\/code>, ustaw typ na <code>string<\/code>i ustaw tam warto\u015b\u0107 domy\u015bln\u0105. WordPress automatycznie po\u0142\u0105czy ten atrybut z wyr\u00f3wnaniem bloku.<\/p>\n<pre><code>attributes: {\n    align: {\n        type: 'string',\n        default: 'center'\n    }\n},\nsupports: {\n    align: true\n},<\/code><\/pre>\n<p>Dzi\u0119ki temu za ka\u017cdym razem, gdy tworzony jest nowy blok naszego typu, domy\u015blne wyr\u00f3wnanie bloku jest wy\u015brodkowane.<\/p>\n<h3>Ba\u0142agan w stylizacji wyr\u00f3wnania blok\u00f3w? To nie nasza wina<\/h3>\n<p><strong>Uwaga:<\/strong> Domy\u015blny styl blokowy z WordPressa zaburzy przep\u0142yw tre\u015bci posta podczas korzystania z wyr\u00f3wnania bloku do lewej i prawej. To samo dzieje si\u0119 z innymi typami blok\u00f3w z WordPressa i nie jest to wy\u0142\u0105cznie problem naszego bloku. Jest to spowodowane dodaniem do elementu float, co powoduje zwini\u0119cie elementu nadrz\u0119dnego. Uwierz mi, pr\u00f3bowa\u0142em skonstruowa\u0107 blok, aby unikn\u0105\u0107 tego problemu. Jedyne, co odkry\u0142em, \u017ce dzia\u0142a poprawnie bez ingerencji w inne wyr\u00f3wnania blok\u00f3w, to dodanie stylizacji do edytora i dostosowanie stylizacji p\u0142ywaka.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153353-61e50c7baa1f0.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-153353-61e50c7baa1f0.png\" alt=\"Utw\u00f3rz niestandardowy blok Gutenberga - cz\u0119\u015b\u0107 6: paski narz\u0119dzi\" ><\/a><\/p>\n<p>Niezale\u017cnie od tego, WordPress u\u0142atwi\u0142 wdro\u017cenie wyr\u00f3wnania blok\u00f3w. Przyjrzyjmy si\u0119 teraz innym paskom narz\u0119dzi, z kt\u00f3rych mo\u017cemy korzysta\u0107.<\/p>\n<h2>Dodawanie paska narz\u0119dzi wyr\u00f3wnania tekstu<\/h2>\n<p>Je\u015bli wolisz pasek narz\u0119dzi do wyr\u00f3wnania tekstu, mo\u017cesz to zrobi\u0107 zamiast wyr\u00f3wnania do blok\u00f3w \u2013 w tym pasku narz\u0119dzi mamy tylko wyr\u00f3wnanie do lewej, do \u015brodka i do prawej. W rzeczywisto\u015bci mo\u017cesz u\u017cywa\u0107 zar\u00f3wno wyr\u00f3wnania tekstu, jak i wyr\u00f3wnania blok\u00f3w razem \u2013 dzia\u0142aj\u0105 osobno. Aby nie dezorientowa\u0107 u\u017cytkownik\u00f3w, mo\u017cesz na przyk\u0142ad doda\u0107 obs\u0142ug\u0119 wyr\u00f3wnania blok\u00f3w do szeroko\u015bci i pe\u0142nej szeroko\u015bci oraz u\u017cy\u0107 paska narz\u0119dzi wyr\u00f3wnania tekstu do kontrolowania wyr\u00f3wnania do lewej, do \u015brodka lub do prawej. W ten spos\u00f3b <strong>unikniesz wy\u017cej wspomnianego problemu<\/strong> z przep\u0142ywem blok\u00f3w w edytorze. Od Ciebie zale\u017cy, jak chcesz, aby Tw\u00f3j blok dzia\u0142a\u0142.<\/p>\n<p>WordPress ma komponent do wyprowadzania paska narz\u0119dzi wyr\u00f3wnywania tekstu, ale nie ma automatycznej obs\u0142ugi dodawania poprawnych klas do faktycznego wyr\u00f3wnania tre\u015bci \u2013 zar\u00f3wno w edytorze, jak i w interfejsie (przynajmniej na tyle, na ile si\u0119 znalaz\u0142em!). Musimy r\u0119cznie doda\u0107 i zaktualizowa\u0107 atrybut wyr\u00f3wnania tekstu.<\/p>\n<h3>Dodawanie <code>BlockControls<\/code>i<code>AlignmentToolbar<\/code><\/h3>\n<p>Dodajmy wreszcie <code>BlockControls<\/code>do naszej <code>edit<\/code>funkcji dla naszego wyj\u015bcia na pasku narz\u0119dzi. Komponent do wyr\u00f3wnania tekstu pochodzi <code>AlignmentToolbar<\/code>z <code>wp.blockEditor<\/code>pakietu.<\/p>\n<pre><code>const { registerBlockType } = wp.blocks;\nconst { RichText, InspectorControls, BlockControls, AlignmentToolbar } = wp.blockEditor;\nconst { ToggleControl, PanelBody, PanelRow, CheckboxControl, SelectControl, ColorPicker } = wp.components;\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    attributes: {\n        myRichHeading: {\n            type: 'string',\n        },\n        myRichText: {\n            type: 'string',\n            source: 'html',\n            selector: 'p'\n        },\n        textAlignment: {\n            type: 'string',\n        }\n    },\n    supports: {\n        align: ['wide', 'full']\n    },\n    edit: (props) =&gt; {\n        const { attributes, setAttributes } = props;\n        const alignmentClass = (attributes.textAlignment != null)? 'has-text-align-' + attributes.textAlignment: '';\n\u00a0\n        return (&lt;div className={alignmentClass}&gt;\n                &lt;InspectorControls&gt;\n                    ... \n                &lt;\/InspectorControls&gt;\n                &lt;BlockControls&gt;\n                    &lt;AlignmentToolbar\n                        value={attributes.textAlignment}\n                        onChange={(newalign) =&gt; setAttributes({ textAlignment: newalign })}\n                    \/&gt;\n                &lt;\/BlockControls&gt;\n                &lt;RichText \n                    tagName=\"h2\"\n                    placeholder=\"Write your heading here\"\n                    value={attributes.myRichHeading}\n                    onChange={(newtext) =&gt; setAttributes({ myRichHeading: newtext })}\n                \/&gt;\n                &lt;RichText\n                    tagName=\"p\"\n                    placeholder=\"Write your paragraph here\"\n                    value={attributes.myRichText}\n                    onChange={(newtext) =&gt; setAttributes({ myRichText: newtext })}\n                \/&gt;\n            &lt;\/div&gt;\n        );\n\u00a0\n    },\n    save: (props) =&gt; { \n        const { attributes } = props;\n\u00a0\n        const alignmentClass = (attributes.textAlignment != null)? 'has-text-align-' + attributes.textAlignment: '';\n        return (&lt;div className={alignmentClass}&gt;\n                &lt;RichText.Content \n                    tagName=\"h2\"\n                    value={attributes.myRichHeading}\n                \/&gt;\n                &lt;RichText.Content \n                    tagName=\"p\"\n                    value={attributes.myRichText}\n                \/&gt;\n                {attributes.activateLasers &amp;&amp; \n                    &lt;div className=\"lasers\"&gt;Lasers activated&lt;\/div&gt;\n                }\n            &lt;\/div&gt;\n        );\n    }\n});<\/code><\/pre>\n<p>Zauwa\u017c, \u017ce wykluczy\u0142em zawarto\u015b\u0107 wszystkiego, co stworzyli\u015bmy w <code>InspectorControls<\/code>poprzednim kroku, aby skr\u00f3ci\u0107 kod.<\/p>\n<p>Pomi\u0119dzy wierszem <code>#37<\/code>do <code>#42<\/code>znajduje si\u0119 ca\u0142a zawarto\u015b\u0107 naszego paska narz\u0119dzi (opr\u00f3cz wyr\u00f3wnania blok\u00f3w automatycznie dodanego przez <code>supports<\/code>w\u0142a\u015bciwo\u015b\u0107 i formatowania tekstu dodanego przez nasze <code>RichText<\/code>komponenty). U\u017cywamy <code>BlockControls<\/code>, aby uzyska\u0107 dost\u0119p do paska narz\u0119dzi, a wewn\u0105trz dodajemy <code>AlignmentToolbar<\/code>komponent.<\/p>\n<p>Jak ju\u017c kilkakrotnie zrobili\u015bmy z danymi wej\u015bciowymi, udost\u0119pniamy <code>value<\/code>w\u0142a\u015bciwo\u015b\u0107 do pokazywania zapisanej warto\u015bci oraz <code>onChange<\/code>w\u0142a\u015bciwo\u015b\u0107 do aktualizowania naszego atrybutu w <code>AlignmentToolbar<\/code>komponencie. Atrybut, kt\u00f3rego u\u017cyjemy do przechowywania wybranego wyr\u00f3wnania tekstu, jest zdefiniowany jako <code>textAlignment<\/code>i musi by\u0107 typem <code>string<\/code>. Jak zwykle mo\u017cesz poda\u0107 a, <code>default<\/code>aby zapewni\u0107, \u017ce nowo utworzone bloki otrzymaj\u0105 domy\u015blne wyr\u00f3wnanie.<\/p>\n<p>Aby upewni\u0107 si\u0119, \u017ce blok zar\u00f3wno wyprowadza informacje o wyr\u00f3wnaniu, jak i jest poprawnie stylizowany (wi\u0119c faktycznie widzimy wyr\u00f3wnanie zmiany tekstu) zar\u00f3wno w edytorze, jak i w interfejsie u\u017cytkownika, musimy r\u0119cznie skonfigurowa\u0107 odpowiedni\u0105 klas\u0119 w opakowuj\u0105cym div. W obu <code>edit<\/code>definiuj\u0119 <code>save<\/code>zmienn\u0105, kt\u00f3ra sprawdza, czy <code>attributes.textAlignment<\/code>jest ustawiona. Je\u015bli tak, tworz\u0119 nazw\u0119 klasy zgodnie ze standardami WordPressa dotycz\u0105cymi wyr\u00f3wnania tekstu, czyli \u201ehas-text-align-(left|center|right)&#8221;. Dzi\u0119ki tej klasie WordPress zastosuje swoj\u0105 stylizacj\u0119 do naszego bloku i upewni si\u0119, \u017ce nasz blok jest poprawnie wyr\u00f3wnany wizualnie, zar\u00f3wno w edytorze, jak i interfejsie.<\/p>\n<h3>Dodawanie niestandardowych pask\u00f3w narz\u0119dzi z w\u0142asnymi przyciskami<\/h3>\n<p>Mo\u017cesz tak\u017ce doda\u0107 w\u0142asne przyciski na pasku narz\u0119dzi, aby robi\u0107, co chcesz, po ich klikni\u0119ciu. Aby to zrobi\u0107, b\u0119dziesz chcia\u0142 doda\u0107 komponent, <code>Toolbar<\/code>a wewn\u0105trz tego elementu dodaj <code>IconButton<\/code>(oba w <code>wp.components<\/code>pakiecie). Oczywi\u015bcie wszystko w <code>BlockControls<\/code>ci\u0105gu.<\/p>\n<p><strong>Uwaga<\/strong>: Wed\u0142ug dziennika zmian WordPressa Gutenberga <code>IconButton<\/code>jest przestarza\u0142e na rzecz u\u017cywania <code>Button<\/code>. Jednak nie wydaje mi si\u0119, aby ikona pojawia\u0142a si\u0119 za pomoc\u0105 <code>Button<\/code>komponentu, bez wzgl\u0119du na to, co robi\u0119, mimo \u017ce ma go obs\u0142ugiwa\u0107. Wi\u0119c od teraz b\u0119d\u0119 u\u017cywa\u0142 <code>IconButton<\/code>.<\/p>\n<p>Oczywi\u015bcie mo\u017cesz po\u0142\u0105czy\u0107 wiele komponent\u00f3w paska narz\u0119dzi w ramach programu <code>BlockControls<\/code>. Za pomoc\u0105 poni\u017cszego kodu dodajemy pasek narz\u0119dzi wyr\u00f3wnania tekstu i nasz niestandardowy pasek narz\u0119dzi z jednym przyciskiem po nim.<\/p>\n<pre><code>&lt;BlockControls&gt;\n    &lt;AlignmentToolbar\n        value={attributes.textAlignment}\n        onChange={(newalign) =&gt; setAttributes({ textAlignment: newalign })}\n    \/&gt;\n    &lt;Toolbar&gt;\n        &lt;IconButton\n            label=\"My very own custom button\"\n            icon=\"edit\"\n            className=\"my-custom-button\"\n            onClick={() =&gt; console.log('pressed button')}\n        \/&gt;\n    &lt;\/Toolbar&gt;\n&lt;\/BlockControls&gt;<\/code><\/pre>\n<p>Sk\u0142adnik IconButton akceptuje ikon\u0119 z <a href=\"https:\/\/developer.wordpress.org\/resource\/dashicons\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dashiconem WordPress<\/a> lub plik SVG do w\u0142a\u015bciwo\u015bci <code>icon<\/code>. Mo\u017cemy dostarczy\u0107 inne rekwizyty, takie jak <code>className<\/code>i <code>label<\/code>(pojawi\u0105 si\u0119 w podpowiedzi po najechaniu na przycisk). Rekwizyt, kt\u00f3ry nas najbardziej interesuje, to oczywi\u015bcie <code>onClick<\/code>rekwizyt, kt\u00f3ry uruchamia si\u0119 po klikni\u0119ciu przycisku. Tutaj mo\u017cemy poda\u0107 funkcj\u0119 i zasadniczo robi\u0107, co chcemy. Mo\u017cliwo\u015bci s\u0105 nieograniczone i zale\u017c\u0105 od tego, co chcesz robi\u0107. W powy\u017cszym kodzie po prostu konsoli loguj\u0119 co\u015b po klikni\u0119ciu przycisku. W miar\u0119 post\u0119p\u00f3w w tej serii samouczk\u00f3w prawdopodobnie dostaniesz kilka pomys\u0142\u00f3w, jak sprawi\u0107, by niestandardowy przycisk robi\u0142 to, co chcesz.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153353-61e50c7e57cd7.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-153353-61e50c7e57cd7.png\" alt=\"Utw\u00f3rz niestandardowy blok Gutenberga - cz\u0119\u015b\u0107 6: paski narz\u0119dzi\" ><\/a><\/p>\n<p>To jest to, co zrobili\u015bmy do tej pory. W kolejnym kroku serii zaczniemy przygl\u0105da\u0107 si\u0119 bardziej zaawansowanym rzeczom i nauczymy si\u0119 tworzy\u0107 w\u0142asne komponenty, aby wykorzysta\u0107 stan i inne korzy\u015bci.<\/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 tym po\u015bcie dowiemy si\u0119, jak doda\u0107 paski narz\u0119dzi WordPress Gutenberg do naszego bloku; wyr\u00f3wnanie tekstu, wyr\u00f3wnanie blok\u00f3w i nasze w\u0142asne niestandardowe paski narz\u0119dzi.<\/p>\n","protected":false},"author":1,"featured_media":153354,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[897,940,940,919,897,919,1110,815,836,836,845,845,866,866,815],"tags":[1169],"class_list":{"0":"post-233448","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-kod","8":"category-gutenberg-7","10":"category-inny","13":"category-n-a","14":"category-wtyczki","15":"category-przewodnik-dla-poczatkujacych","17":"category-samouczki","19":"category-wordpress-7","22":"tag-affiai-pl"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233448","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=233448"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233448\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/153354"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=233448"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=233448"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=233448"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}