{"id":233967,"date":"2023-02-26T18:44:00","date_gmt":"2023-02-26T15:44:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233967"},"modified":"2022-11-11T13:28:01","modified_gmt":"2022-11-11T10:28:01","slug":"tworz-i-pobieraj-niestandardowe-punkty-koncowe-rest-w-blokach-gutenberga","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/tworz-i-pobieraj-niestandardowe-punkty-koncowe-rest-w-blokach-gutenberga\/","title":{"rendered":"Tw\u00f3rz i pobieraj niestandardowe punkty ko\u0144cowe REST w blokach Gutenberga"},"content":{"rendered":"\n<p>W tym po\u015bcie spr\u00f3buj\u0119 stworzy\u0107 przegl\u0105d tworzenia niestandardowych punkt\u00f3w ko\u0144cowych API REST i wykonywania \u017c\u0105da\u0144 dla nich w niestandardowym bloku Gutenberga. Oznacza to wysy\u0142anie \u017c\u0105da\u0144 za pomoc\u0105 <code>fetch<\/code>metod informacji niedost\u0119pnych w zarejestrowanych magazynach danych WordPressa.<\/p>\n<p>Przyjazne przypomnienie: wi\u0119kszo\u015b\u0107 podstawowych informacji jest ju\u017c dost\u0119pna w magazynach danych WordPressa. Na przyk\u0142ad podstawowe zapytania dotycz\u0105ce post\u00f3w, stron, niestandardowych typ\u00f3w post\u00f3w, taksonomii, autor\u00f3w, medi\u00f3w i innych s\u0105 dost\u0119pne bez konieczno\u015bci tworzenia w\u0142asnych niestandardowych punkt\u00f3w ko\u0144cowych. Aby uzyska\u0107 dost\u0119p do tych sklep\u00f3w, wola\u0142by\u015b u\u017cy\u0107 podstawowego modu\u0142u danych WordPress (<code>withSelect<\/code>i <code>select()<\/code>). Poni\u017cej znajduje si\u0119 samouczek, kt\u00f3ry szczeg\u00f3\u0142owo wyja\u015bnia, jak to zrobi\u0107.<\/p>\n<h2>WordPress REST API<\/h2>\n<p>Je\u015bli jeszcze nie wiedzia\u0142e\u015b; WordPress REST API to interfejs JSON do wysy\u0142ania i odbierania danych z Twojej witryny WordPress. Mo\u017ce by\u0107 u\u017cywany zewn\u0119trznie lub wewn\u0119trznie. Dzi\u0119ki edytorowi Gutenberg i przej\u015bciu na Javascript zdecydowanie wzros\u0142o wykorzystanie REST API. WordPress REST API ma ca\u0142\u0105 mas\u0119 punkt\u00f3w ko\u0144cowych, z kt\u00f3rych mo\u017cemy korzysta\u0107. Zobacz <a href=\"https:\/\/developer.wordpress.org\/rest-api\/reference\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pe\u0142ne informacje na temat wszystkich punkt\u00f3w ko\u0144cowych interfejsu API REST tutaj<\/a>. Znajdziesz na przyk\u0142ad punkty ko\u0144cowe dla post\u00f3w i wi\u0119kszo\u015b\u0107 innych tre\u015bci wewn\u0119trznych \u2013 zar\u00f3wno do czytania, jak i aktualizacji. Tw\u00f3rcy motyw\u00f3w lub wtyczek mog\u0105 rejestrowa\u0107 w\u0142asne niestandardowe punkty ko\u0144cowe.<\/p>\n<p>Twoja witryna WordPress ma g\u0142\u00f3wny adres URL interfejsu API REST, domy\u015blnie zlokalizowany pod adresem <code>&lt;your domain&gt;\/wp-json<\/code>. Na przyk\u0142ad lokalny WordPress z adresem URL <code>http:\/\/localhost\/wordpress\/<\/code>mo\u017ce uzyska\u0107 dost\u0119p do REST API pod adresem <code>http:\/\/localhost\/wordpress\/wp-json<\/code>. Stamt\u0105d musimy do\u0142\u0105czy\u0107 punkty ko\u0144cowe. Odnosz\u0105c si\u0119 do powy\u017cszego odniesienia do punkt\u00f3w ko\u0144cowych, mo\u017cemy pobra\u0107 list\u0119 najnowszych post\u00f3w w punkcie ko\u0144cowym <code>\/wp\/v2\/posts<\/code>. Oznacza to, \u017ce je\u015bli przejdziesz do <code>http:\/\/localhost\/wordpress\/wp-json\/wp\/v2\/posts<\/code>w przegl\u0105darce, otrzymasz odpowied\u017a w formacie JSON na najnowsze posty w Twojej witrynie WordPress.<\/p>\n<p>Uwaga dotycz\u0105ca przestrzeni nazw jest w porz\u0105dku. Adres URL interfejsu API REST zaczyna si\u0119 od przestrzeni nazw (przestrze\u0144 nazw <code>wp\/v2<\/code>\u201e to WordPress&quot;, jak wida\u0107 w przyk\u0142adowych adresach URL powy\u017cej). Przestrzenie nazw to koncepcja maj\u0105ca na celu unikni\u0119cie kolizji w podstawowym WordPressie, motywach i wtyczkach dodaj\u0105cych punkty ko\u0144cowe o tej samej nazwie. Stw\u00f3rz swoj\u0105 w\u0142asn\u0105 unikaln\u0105 przestrze\u0144 nazw \u2014 zazwyczaj form\u0119 \u015blimaka swojego motywu lub nazwy wtyczki. Po slugu og\u00f3ln\u0105 zasad\u0105 jest dodawanie numeru wersji, zwykle zaczynaj\u0105c od v1. Jako przyk\u0142ad slug mojego motywu to \u201e <code>awhitepixel<\/code>&#8222;, wi\u0119c gdybym mia\u0142 utworzy\u0107 niestandardowe punkty ko\u0144cowe w moim motywie, u\u017cy\u0142bym przestrzeni nazw \u201e <code>awhitepixel\/v1<\/code>&#8222;. Dzi\u0119ki tej przestrzeni nazw mog\u0142em zarejestrowa\u0107 punkt ko\u0144cowy \u201e <code>posts<\/code>&#8221; i nie spowodowa\u0142oby to \u017cadnych problem\u00f3w, mimo \u017ce jest identyczny z nazw\u0105 punktu ko\u0144cowego WordPressa.<\/p>\n<p>Praca z REST API w WordPressie to obszerny temat, na kt\u00f3rym dost\u0119pnych jest wiele dobrych informacji. W tym po\u015bcie skupiam si\u0119 na u\u017cyteczno\u015bci w edytorze Gutenberg i jak je odzyska\u0107 w JavaScript.<\/p>\n<h2>Co zrobimy i czego potrzebujemy<\/h2>\n<p>U\u017cyteczno\u015b\u0107 \u017c\u0105dania informacji niestandardowych ma szeroki zakres zastosowa\u0144, wi\u0119c zwykle musisz dostosowa\u0107 poni\u017csze przyk\u0142ady kodu do swoich potrzeb. Dane mog\u0105 by\u0107 niestandardowym zapytaniem post, niestandardowym zapytaniem SQL lub czym\u015b zupe\u0142nie innym.<\/p>\n<p>Kiedy tworzymy niestandardowy punkt ko\u0144cowy, mamy pe\u0142n\u0105 kontrol\u0119 nad jego zwrotem. Mo\u017cemy wykonywa\u0107 dowolne operacje i zapytania w WordPress\/PHP i przekazywa\u0107 je dalej jako JSON. A w naszym bloku Gutenberga b\u0119dziemy mogli pobra\u0107 ten zwrot i zrobi\u0107 z nim, co chcemy, w ramach funkcji bloku <code>edit<\/code>. Zazwyczaj u\u017cywa si\u0119 danych do przedstawienia u\u017cytkownikowi ko\u0144cowemu wyboru lub informacji w edytorze blok\u00f3w, ale mo\u017cna r\u00f3wnie\u017c przechowywa\u0107 informacje z nich w bloku do dalszego wykorzystania. Mo\u017cesz tak\u017ce tworzy\u0107 w\u0142asne niestandardowe sklepy dla tych danych, ale nie b\u0119d\u0119 si\u0119 zastanawia\u0142, jak to zrobi\u0107.<\/p>\n<p>Zak\u0142adam, \u017ce wiesz ju\u017c, jak tworzy\u0107 niestandardowe bloki Gutenberga, wi\u0119c nie b\u0119d\u0119 omawia\u0142 tego szczeg\u00f3\u0142owo tutaj.<\/p>\n<h2>Tworzenie punktu ko\u0144cowego REST API<\/h2>\n<p>Rejestracja niestandardowego punktu ko\u0144cowego REST API odbywa si\u0119 w PHP. Mo\u017cesz doda\u0107 ten kod w swoim motywie <code>functions.php<\/code>lub w kodzie aktywnej wtyczki. Pod\u0142\u0105cz funkcj\u0119 do action <code>rest_api_init<\/code>i uruchom funkcj\u0119 <code>[register_rest_route](https:\/\/developer.wordpress.org\/reference\/functions\/register_rest_route\/)()<\/code>dla ka\u017cdego punktu ko\u0144cowego, kt\u00f3ry chcesz zarejestrowa\u0107.<\/p>\n<p>Podaj swoj\u0105 przestrze\u0144 nazw jako pierwszy parametr, tras\u0119 punktu ko\u0144cowego jako drugi i tablic\u0119 ustawie\u0144 jako trzeci parametr do <code>register_rest_route()<\/code>. Czwarty parametr okre\u015bla, czy chcesz zast\u0105pi\u0107 istniej\u0105c\u0105 tras\u0119; nie co\u015b, na co tu przyjrzymy. W tablicy dla trzeciego parametru nale\u017cy jako minimum ustawi\u0107 w\u0142a\u015bciwo\u015b\u0107 &#8217; <code>callback<\/code>&#8217; na funkcj\u0119, kt\u00f3ra jest odpowiedzialna za zwracanie danych punktu ko\u0144cowego. <code>method<\/code>Powszechne jest r\u00f3wnie\u017c ustawienie \u201e &#8222;, np. ustawienie punktu ko\u0144cowego na \u201e &#8221; <code>GET<\/code>, \u201e <code>POST<\/code>&#8222;, \u201e <code>PUT<\/code>&#8221; itd.<\/p>\n<p>Zacznijmy od zarejestrowania prostego punktu ko\u0144cowego;<\/p>\n<pre><code>add_action('rest_api_init', function() {\n    register_rest_route('awhitepixel\/v1', '\/mydata', [\n        'method' =&gt; 'GET',\n        'callback' =&gt; 'awhitepixel_rest_route_mydata'\n    ]);\n});<\/code><\/pre>\n<p>Przestrze\u0144 nazw mojego motywu to \u201e <code>awhitepixel\/v1<\/code>&#8221; i rejestruj\u0119 punkt ko\u0144cowy \u201e <code>mydata<\/code>&#8221; w tej przestrzeni nazw. Oznacza to, \u017ce mog\u0119 uzyska\u0107 dost\u0119p do mojego niestandardowego interfejsu API REST pod adresem <code>http:\/\/localhost\/wordpress\/wp-json\/awhitepixel\/v1\/mydata<\/code>.<\/p>\n<p>Rejestruj\u0105c (lub zmieniaj\u0105c) trasy REST API, musisz <strong>usun\u0105\u0107 swoje permalinki<\/strong>, aby dzia\u0142a\u0142y. Mo\u017cesz to zrobi\u0107, odwiedzaj\u0105c Ustawienia&gt; Permalinki i po prostu kliknij Zapisz.<\/p>\n<p>Powy\u017cszy kod jeszcze nie dzia\u0142a, poniewa\u017c nie zdefiniowa\u0142em funkcji ustawionej jako callback: <code>awhitepixel_rest_route_mydata<\/code>. Funkcja callback otrzymuje jeden parametr; tablica danych z informacjami i argumentami przekazanymi z \u017c\u0105dania. Na koniec musisz dok\u0142adnie rozwa\u017cy\u0107 zwrot funkcji zwrotnej.<\/p>\n<p>Po pierwsze, zawsze musisz zwr\u00f3ci\u0107 co\u015b z wywo\u0142ania zwrotnego punktu ko\u0144cowego. Ka\u017cdy zwrot zostanie automatycznie przekonwertowany do formatu JSON przez WordPress. Oznacza to, \u017ce mo\u017cesz zwr\u00f3ci\u0107 praktycznie ka\u017cd\u0105 form\u0119 danych w swojej funkcji; ci\u0105g, null, tablica lub <code>[WP_Error](https:\/\/developer.wordpress.org\/reference\/classes\/wp_error\/)<\/code>instancja. Mo\u017cesz r\u00f3wnie\u017c zdecydowa\u0107 si\u0119 na zwr\u00f3cenie <code>[WP_REST_Response](https:\/\/developer.wordpress.org\/reference\/classes\/wp_rest_response\/)<\/code>obiektu, aby uzyska\u0107 wi\u0119ksz\u0105 kontrol\u0119 nad np. kodem stanu lub informacjami nag\u0142\u00f3wka. Zalecam zawini\u0119cie zwrotu w funkcj\u0119, <code>[rest_ensure_response](https:\/\/developer.wordpress.org\/reference\/functions\/rest_ensure_response\/)()<\/code>aby upewni\u0107 si\u0119, \u017ce Twoja odpowied\u017a jest prawid\u0142ow\u0105 odpowiedzi\u0105 REST.<\/p>\n<p>Zdefiniujmy nasz\u0105 funkcj\u0119 zwrotn\u0105 i jako pocz\u0105tek zwr\u00f3\u0107my prosty ci\u0105g znak\u00f3w;<\/p>\n<pre><code>function awhitepixel_rest_route_mydata($data) {\n    $response = 'Hello there!';\n    return rest_ensure_response($response);\n}<\/code><\/pre>\n<p>Za pomoc\u0105 powy\u017cszego kodu (i opr\u00f3\u017cnionych permalink\u00f3w) mog\u0119 teraz przej\u015b\u0107 do adresu URL <code>http:\/\/localhost\/wordpress\/wp-json\/awhitepixel\/v1\/mydata<\/code>.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151531-61e4cc06da37f.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-151531-61e4cc06da37f.png\" alt=\"Tw\u00f3rz i pobieraj niestandardowe punkty ko\u0144cowe REST w blokach Gutenberga\" ><\/a><\/p>\n<p>Od tego momentu mo\u017cemy doda\u0107 dowolny kod w naszej funkcji zwrotnej, aby wygenerowa\u0107 odpowiednie dane do zwr\u00f3cenia. Mo\u017cesz wysy\u0142a\u0107 zapytania do tre\u015bci WordPress za pomoc\u0105 np <code>[WP_Query](https:\/\/developer.wordpress.org\/reference\/classes\/wp_query\/)<\/code>., tworzy\u0107 zapytania w bazie danych lub \u017c\u0105da\u0107 danych zewn\u0119trznych. Ta cz\u0119\u015b\u0107 zale\u017cy od Ciebie.<\/p>\n<p>Przejd\u017amy teraz na przeciwn\u0105 stron\u0119; jak sk\u0142ada\u0107 wnioski.<\/p>\n<h2>Wykonywanie \u017c\u0105da\u0144 REST API w JavaScript<\/h2>\n<p>Wykonywanie \u017c\u0105dania REST jest zwykle wykonywane przy u\u017cyciu <code>[fetch](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Fetch_API)<\/code>JavaScript. WordPress zapewnia w\u0142asne opakowanie <code>fetch<\/code>, kt\u00f3re upraszcza \u017c\u0105dania WordPress REST API; <code>[wp.apiFetch](https:\/\/developer.wordpress.org\/block-editor\/packages\/packages-api-fetch\/)<\/code>. To jest to, czego u\u017cyj\u0119 w moim niestandardowym bloku Gutenberga. Nale\u017cy pami\u0119ta\u0107, \u017ce <code>fetch<\/code>\u017c\u0105dania zwracaj\u0105 \u201eobietnic\u0119&#8221; \u2013 wi\u0119c musimy powi\u0105za\u0107 a <code>.then()<\/code>, aby obs\u0142u\u017cy\u0107 rzeczywisty zwrot \u017c\u0105dania. Podstawowe u\u017cycie jest mniej wi\u0119cej takie;<\/p>\n<pre><code>wp.apiFetch({\n    path: '&lt;namespace and endpoint&gt;',\n}).then(data =&gt; {\n    console.log('response from apifetch: ', data);\n});<\/code><\/pre>\n<p><code>apiFetch<\/code>pozwala nam dostarczy\u0107 <code>path<\/code>w\u0142a\u015bciwo\u015b\u0107 zamiast budowa\u0107 pe\u0142ny adres URL. Wszystko, co musimy poda\u0107, to przestrze\u0144 nazw i punkt ko\u0144cowy, a my <code>apiFetch<\/code>do\u0142\u0105czymy to do g\u0142\u00f3wnego adresu URL interfejsu API REST WordPressa. Wewn\u0105trz <code>.then()<\/code>funkcji mamy dost\u0119p do danych, kt\u00f3re s\u0105 ju\u017c przekonwertowane na JSON. To tutaj zrobisz co\u015b z danymi. Zwykle zwr\u00f3cone dane przechowujesz np. w stanie komponentu.<\/p>\n<p>Poni\u017cej znajduje si\u0119 przyk\u0142ad niestandardowego <code>edit<\/code>komponentu bloku Gutenberga. Jest oparty na klasach w celu <code>state<\/code>przechowywania zwr\u00f3conych danych z \u017c\u0105dania REST API. Pozwala nam to r\u00f3wnie\u017c na uruchomienie \u017c\u0105dania <code>componentDidMount()<\/code>przy pierwszym montowaniu (zobacz <a href=\"https:\/\/reactjs.org\/docs\/state-and-lifecycle.html#adding-lifecycle-methods-to-a-class\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dokumentacj\u0119 React na temat metod cyklu \u017cycia<\/a> ). Wszystko to stanowi prosty przyk\u0142ad, kt\u00f3ry pomo\u017ce ci zrozumie\u0107 podstawow\u0105 koncepcj\u0119; nie jako przepis na zrobienie tego dok\u0142adnie w ten spos\u00f3b. Mo\u017cesz rozwa\u017cy\u0107 u\u017cycie <a href=\"https:\/\/reactjs.org\/docs\/hooks-intro.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">hak\u00f3w React i komponent\u00f3w funkcjonalnych<\/a> lub zamiast tego skonstruowa\u0107 komponent <a href=\"https:\/\/reactjs.org\/docs\/higher-order-components.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wy\u017cszego rz\u0119du .<\/a><\/p>\n<pre><code>const { Component } = wp.element;\nconst { Spinner } = wp.components;\n\u00a0\nclass BlockEdit extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            list: [],\n            loading: true\n        }\n    }\n\u00a0\n    componentDidMount() {\n        this.runApiFetch();\n    }\n\u00a0\n    runApiFetch() {\n        wp.apiFetch({\n            path: 'awhitepixel\/v1\/mydata',\n        }).then(data =&gt; {\n            this.setState({\n                list: data,\n                loading: false\n            });\n        });\n    }\n\u00a0\n    render() {\n        return(\n            &lt;div&gt;\n                {this.state.loading? (&lt;Spinner \/&gt;\n                ): (&lt;p&gt;Data is ready!&lt;\/p&gt;\n                )}\n            &lt;\/div&gt;\n        );\n\u00a0\n    }\n}\nexport default BlockEdit;<\/code><\/pre>\n<p>Powy\u017cszy przyk\u0142ad jest sk\u0142adem opartym na klasach, kt\u00f3ry jest dostarczany do funkcji bloku <code>edit<\/code>w <code>registerBlockType()<\/code>. Ustawia obiekt stanu tablicy do przechowywania danych (oczywi\u015bcie zale\u017cy to od zwracanych danych) oraz warto\u015b\u0107 logiczn\u0105 stanu, aby wiedzie\u0107, kiedy \u017c\u0105danie asynchroniczne zosta\u0142o zwr\u00f3cone. Po zamontowaniu komponentu (wyrenderowaniu po raz pierwszy) uruchamia funkcj\u0119 wykonuj\u0105c\u0105 <code>apiFetch<\/code>\u017c\u0105danie. Ustawiamy \u015bcie\u017ck\u0119 do punktu ko\u0144cowego, kt\u00f3ry zarejestrowali\u015bmy w PHP powy\u017cej. Metod\u0105 jest domy\u015blnie GET, wi\u0119c nie musimy tego okre\u015bla\u0107 w <code>apiFetch<\/code>. A wewn\u0105trz <code>.then()<\/code>funkcji, gdy \u017c\u0105danie jest gotowe, aktualizujemy stan komponentu o zwr\u00f3cone dane.<\/p>\n<p>Oczywi\u015bcie funkcja renderowania twojego bloku zrobi\u0142aby wi\u0119cej z samymi zwr\u00f3conymi danymi. Mo\u017cesz chcie\u0107 przekaza\u0107 dane u\u017cytkownikowi, przedstawiaj\u0105c w jaki\u015b spos\u00f3b list\u0119 do wyboru. Wszystko zale\u017cy od tego, jakie to dane i do czego chcesz je wykorzysta\u0107.<\/p>\n<h2>Przekazywanie argument\u00f3w do punktu ko\u0144cowego<\/h2>\n<p>W niekt\u00f3rych przypadkach musimy przekaza\u0107 pewne argumenty do punktu ko\u0144cowego. Typowe zastosowania to przekazywanie identyfikatora po punkcie ko\u0144cowym; na przyk\u0142ad <code>http:\/\/localhost\/wordpress\/wp-json\/wp\/v2\/posts\/14<\/code>zwr\u00f3ci identyfikator postu 14.<\/p>\n<p>Jest to do\u015b\u0107 proste i odbywa si\u0119 poprzez dodanie wzorca wyszukiwania wyra\u017ce\u0144 regularnych do punktu ko\u0144cowego podczas jego rejestracji. Budowa z\u0142o\u017conych wzorc\u00f3w wymaga pewnej znajomo\u015bci wyra\u017ce\u0144 regularnych, ale poni\u017cej znajduje si\u0119 przyk\u0142ad, kt\u00f3ry pasuje do liczby i przypisuje jej nazw\u0119 \u201eid&#8221;. Nazywanie dopasowa\u0144 daje nam dost\u0119p do zmiennej w naszej funkcji zwrotnej. Poka\u017c\u0119 ci, co mam na my\u015bli.<\/p>\n<p>Zarejestrujmy now\u0105 tras\u0119 punktu ko\u0144cowego. U\u017cywamy tego samego punktu ko\u0144cowego, co wcze\u015bniej (&#8217; <code>awhitepixel\/v1\/mydata<\/code>&#8217;), ale dla tej trasy dodajemy na ko\u0144cu dopasowanie wyra\u017cenia regularnego dla liczby.<\/p>\n<pre><code>add_action('rest_api_init', function() {\n    register_rest_route('awhitepixel\/v1', '\/mydata', [\n        'method' =&gt; 'GET',\n        'callback' =&gt; 'awhitepixel_rest_route_mydata'\n    ]);\n\u00a0\n    register_rest_route('awhitepixel\/v1', '\/mydata\/(?P&lt;id&gt;[d]+)', [\n        'method' =&gt; 'GET',\n        'callback' =&gt; 'awhitepixel_rest_route_mydata'\n    ]);\n});<\/code><\/pre>\n<p>Wz\u00f3r regex <code>(?P&lt;id&gt;[d]+)<\/code>wydaje si\u0119 tajemniczy, ale b\u0119dzie do\u015b\u0107 jasny przy pewnym podstawowym zrozumieniu wyra\u017cenia regularnego. Cz\u0119\u015b\u0107 <code>[d]+<\/code>pasuje do dowolnej liczby (0-9) 1 lub wi\u0119cej razy. Cz\u0119\u015bci <code>(?P&lt;id&gt;<\/code>i <code>)<\/code>s\u0142u\u017c\u0105 do dopasowywania nazwanej grupy. Nazwa grupy to w tym przypadku <code>id<\/code>, ale mo\u017cesz nazwa\u0107 swoj\u0105 grup\u0119 (grupy) w dowolny spos\u00f3b.<\/p>\n<p>Mo\u017cesz skierowa\u0107 ten punkt ko\u0144cowy do oddzielnej funkcji zwrotnej, ale wybra\u0142em t\u0119 sam\u0105 funkcj\u0119 do obs\u0142ugi zar\u00f3wno \u017c\u0105da\u0144, jak <code>\/mydata<\/code>i <code>\/mydata\/&lt;ID&gt;<\/code>\u017c\u0105da\u0144. Oznacza to, \u017ce w mojej funkcji zwrotnej mog\u0119 wykona\u0107:<\/p>\n<pre><code>function awhitepixel_rest_route_mydata($data) {\n    if ($data['id']) {\n        $response = 'Create return for ID: '. $data['id'];\n    } else {\n        $response = 'Create general return (no ID provided)';\n    }\n    return rest_ensure_response($response);\n}<\/code><\/pre>\n<p>Pami\u0119taj, \u017ce parametr funkcji zwrotnej zawiera zwr\u00f3cone argumenty. Poniewa\u017c nazwa\u0142em moj\u0105 dopasowan\u0105 grup\u0119 \u201e <code>id<\/code>&#8222;, dopasowana warto\u015b\u0107 b\u0119dzie dost\u0119pna w programie <code>$data['id']<\/code>. I wreszcie, poniewa\u017c u\u017cywam tej samej funkcji do obs\u0142ugi \u017c\u0105da\u0144 z identyfikatorem i bez, mog\u0119 \u0142atwo prze\u0142\u0105cza\u0107 si\u0119 mi\u0119dzy dwoma r\u00f3\u017cnymi zwrotami.<\/p>\n<p>Dzi\u0119ki temu (i od\u015bwie\u017conym permalinkom) otrzymam te odpowiedzi dla moich niestandardowych punkt\u00f3w ko\u0144cowych:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151531-61e4cc079c6de.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-151531-61e4cc079c6de.png\" alt=\"Tw\u00f3rz i pobieraj niestandardowe punkty ko\u0144cowe REST w blokach Gutenberga\" ><\/a><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151531-61e4cc08646fc.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-151531-61e4cc08646fc.png\" alt=\"Tw\u00f3rz i pobieraj niestandardowe punkty ko\u0144cowe REST w blokach Gutenberga\" ><\/a><\/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>Przewodnik dotycz\u0105cy tworzenia niestandardowych punkt\u00f3w ko\u0144cowych interfejsu API REST WordPress i wykonywania \u017c\u0105da\u0144 apiFetch dla nich w niestandardowym bloku Gutenberga.<\/p>\n","protected":false},"author":1,"featured_media":224922,"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":["post-233967","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kod","category-gutenberg-7","category-inny","category-n-a","category-wtyczki","category-przewodnik-dla-poczatkujacych","category-samouczki","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233967","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=233967"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233967\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/224922"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=233967"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=233967"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=233967"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}