{"id":233403,"date":"2023-02-13T10:33:00","date_gmt":"2023-02-13T07:33:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233403"},"modified":"2022-11-10T23:30:29","modified_gmt":"2022-11-10T20:30:29","slug":"jak-dodac-pola-post-meta-do-paska-bocznego-dokumentu-gutenberg","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/jak-dodac-pola-post-meta-do-paska-bocznego-dokumentu-gutenberg\/","title":{"rendered":"Jak doda\u0107 pola Post Meta do paska bocznego dokumentu Gutenberg"},"content":{"rendered":"\n<p>W tym po\u015bcie przyjrzymy si\u0119, jak doda\u0107 niestandardowe ustawienia meta postu do paska bocznego Gutenberga, w zak\u0142adce \u201eDokument&quot;, zamiast polega\u0107 na dodawaniu meta p\u00f3l w tradycyjny (i szczerze m\u00f3wi\u0105c znacznie bardziej r\u0119czny) spos\u00f3b.<\/p>\n<p>Je\u015bli pracowa\u0142e\u015b z WordPressem jaki\u015b czas przed pojawieniem si\u0119 Gutenberga, prawdopodobnie jeste\u015b zaznajomiony z dodawaniem niestandardowej meta postu za pomoc\u0105 <code>[add_meta_box](https:\/\/developer.wordpress.org\/reference\/functions\/add_meta_box\/)()<\/code>. Ta funkcja pozwala doda\u0107 metabox z niestandardow\u0105 tre\u015bci\u0105 na dole lub z boku podczas edytowania posta. Ta metoda nadal dzia\u0142a, r\u00f3wnie\u017c w edytorze Gutenberga!<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153559-61e51080f2022.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-153559-61e51080f2022.png\" alt=\"Jak doda\u0107 pola Post Meta do paska bocznego dokumentu Gutenberg\" ><\/a><\/p>\n<p>Jednak wygl\u0105da troch\u0119 nie tak w por\u00f3wnaniu z reszt\u0105 zawarto\u015bci paska bocznego Gutenberga. Nie wspominaj\u0105c ju\u017c o tym, \u017ce musia\u0142by\u015b r\u0119cznie napisa\u0107 kod wej\u015bciowy (pole wyboru, dane wej\u015bciowe tekstowe itp.) za pomoc\u0105 PHP, a tak\u017ce napisa\u0107 dodatkowy kod, aby zapisa\u0107 go, gdy post zostanie zaktualizowany. A je\u015bli chcesz, aby ustawienia meta postu by\u0142y dynamiczne (powiedzmy, \u017ce chcesz ukry\u0107 pole, chyba \u017ce inne pole zosta\u0142o w\u0142\u0105czone), musisz r\u0119cznie umie\u015bci\u0107 skrypt w kolejce i tak, zgad\u0142e\u015b, r\u0119cznie obs\u0142u\u017cy\u0107 logik\u0119 dynamiczn\u0105 ukrywania i pokazywania. To wszystko jest teraz przestarza\u0142e i \u0142atwiejsze dzi\u0119ki nowemu edytorowi Gutenberg opartemu na Javascript. Mo\u017cemy ca\u0142kiem \u0142atwo zrobi\u0107 co\u015b takiego:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153559-61e51081c74ff.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-153559-61e51081c74ff.png\" alt=\"Jak doda\u0107 pola Post Meta do paska bocznego dokumentu Gutenberg\" ><\/a><\/p>\n<h2>Proces<\/h2>\n<p>Proces wygl\u0105da nast\u0119puj\u0105co:<\/p>\n<ul>\n<li>Rejestrujemy ka\u017cdy niestandardowy klucz meta postu, kt\u00f3ry chcemy doda\u0107 w PHP za pomoc\u0105 <code>[register_post_meta](https:\/\/developer.wordpress.org\/reference\/functions\/register_post_meta\/)()<\/code>, i ustawiamy go jako dost\u0119pny w WP REST API. Jest to niezb\u0119dny krok, aby udost\u0119pni\u0107 meta posta w edytorze Gutenberga.<\/li>\n<li>Tworzymy plik JavaScript i umieszczamy go w kolejce specjalnie do edytora (tylko).<\/li>\n<li>Wewn\u0105trz pliku Javascript rejestrujemy wtyczk\u0119 z <code>[registerPlugin](https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/packages\/packages-plugins\/#registerPlugin)()<\/code>poleceniem renderowania naszego komponentu.<\/li>\n<li>Wewn\u0105trz tego komponentu mo\u017cemy wyprowadzi\u0107 wszystko, czego potrzebujemy. Mo\u017cemy u\u017cy\u0107 wbudowanych komponent\u00f3w WordPressa, aby \u0142atwo renderowa\u0107 r\u00f3\u017cne typy ustawie\u0144. Korzystaj\u0105c z pakietu danych WordPress, mo\u017cemy pobiera\u0107 i aktualizowa\u0107 warto\u015bci meta postu od razu po ich zmianie.<\/li>\n<\/ul>\n<p>Przejd\u017amy od razu, zaczynaj\u0105c od cz\u0119\u015bci PHP; rejestracja meta postu.<\/p>\n<h2>Rejestrowanie postu meta<\/h2>\n<p>Dla ka\u017cdego meta postu, kt\u00f3ry chcesz doda\u0107 do paska bocznego Gutenberga, musisz zarejestrowa\u0107 si\u0119 za pomoc\u0105 <code>[register_post_meta](https:\/\/developer.wordpress.org\/reference\/functions\/register_post_meta\/)()<\/code>. Jest to konieczne, aby by\u0142y dost\u0119pne przez WP REST API (kt\u00f3rego u\u017cywa Gutenberg), a tym samym dost\u0119pne w naszym Javascript.<\/p>\n<p>W pliku motywu <code>functions.php<\/code>lub innym aktywnym pliku PHP dodaj funkcj\u0119 podpi\u0119t\u0105 do <code>init<\/code>haka \u201e &#8222;. Wewn\u0105trz funkcji powtarzasz a <code>register_post_meta()<\/code>dla ka\u017cdej niestandardowej meta postu, kt\u00f3r\u0105 chcesz doda\u0107. Funkcja przyjmuje trzy argumenty; pierwszy parametr to typ posta, dla kt\u00f3rego chcesz zarejestrowa\u0107 meta (ustaw jako pusty ci\u0105g dla wszystkich typ\u00f3w post\u00f3w). Drugi parametr to nazwa klucza meta dla twojej meta. A trzeci to szereg ustawie\u0144. Tutaj definiujemy, \u017ce ta meta powinna by\u0107 dost\u0119pna w WP REST API, ustawiaj\u0105c \u201e <code>show_in_rest<\/code>&#8221; na true.<\/p>\n<p>Na przyk\u0142ad, powiedzmy, \u017ce chc\u0119 doda\u0107 prze\u0142\u0105cznik w\u0142\u0105czania\/wy\u0142\u0105czania i wprowadzanie tekstu do paska bocznego edytora. Oznacza to, \u017ce <code>register_post_meta()<\/code>wywo\u0142uj\u0119 odpowiednio warto\u015b\u0107 logiczn\u0105 i ci\u0105g znak\u00f3w. Chc\u0119 r\u00f3wnie\u017c ograniczy\u0107 te posty tylko do post\u00f3w typu \u201epost&#8221;. To wygl\u0105da\u0142oby mniej wi\u0119cej tak:<\/p>\n<pre><code>add_action( 'init', function() {\n    register_post_meta( 'post', '_my_custom_bool', [\n        'show_in_rest' =&gt; true,\n        'single' =&gt; true,\n        'type' =&gt; 'boolean',\n    ] );\n\u00a0\n    register_post_meta( 'post', '_my_custom_text', [\n        'show_in_rest' =&gt; true,\n        'single' =&gt; true,\n        'type' =&gt; 'string',\n    ] );\n} );<\/code><\/pre>\n<p>Teraz mam klucz post meta <code>_my_custom_bool<\/code>i <code>_my_custom_text<\/code>gotowy i dost\u0119pny w Gutenbergu. Zalecam zmian\u0119 ich nazwy na co\u015b, co ma dla Ciebie sens.<\/p>\n<h2>Rejestracja naszej wtyczki Javascript<\/h2>\n<p>W nast\u0119pnym kroku dodamy plik JavaScript i upewnimy si\u0119, \u017ce umieszczamy go w kolejce za pomoc\u0105 PHP.<\/p>\n<p>Pami\u0119taj, \u017ce pisz\u0119 kod Javascript w sk\u0142adni ES6. Oznacza to, \u017ce ustawi\u0142em konfiguracj\u0119 webpack\/Babel, aby skompilowa\u0107 m\u00f3j plik do oddzielnego, czytelnego pliku JavaScript dla przegl\u0105darki.<\/p>\n<p>Mam przewodnik, jak to skonfigurowa\u0107, je\u015bli nie masz pewno\u015bci, jak to dzia\u0142a:<\/p>\n<p>Musimy si\u0119 upewni\u0107, \u017ce WordPress za\u0142aduje nasz skrypt w edytorze. Robimy to podpinaj\u0105c funkcj\u0119 <code>enqueue_block_editor_assets<\/code>i wywo\u0142uj\u0105c <code>[wp_enqueue_script](https:\/\/developer.wordpress.org\/reference\/functions\/wp_enqueue_script\/)()<\/code>:<\/p>\n<pre><code>add_action( 'enqueue_block_editor_assets', function() {\n    wp_enqueue_script(\n        'awp-custom-meta-plugin', \n        get_template_directory_uri(). '\/assets\/js\/gutenberg\/plugin-awp-custom-postmeta.js', \n        [ 'wp-edit-post' ],\n        false,\n        false\n    );\n} );<\/code><\/pre>\n<p>Zak\u0142adam, \u017ce umiesz kolejkowa\u0107 skrypty i potrafisz zast\u0105pi\u0107 warto\u015bci w\u0142asnymi. Jako drugi parametr podaj\u0119 \u015bcie\u017ck\u0119 do pliku kompilacji (nie do pliku \u017ar\u00f3d\u0142owego). Aby upewni\u0107 si\u0119, \u017ce nasz skrypt nie zostanie za\u0142adowany zbyt wcze\u015bnie, ustawi\u0142em \u201e <code>wp-edit-post<\/code>&#8221; jako zale\u017cno\u015b\u0107. To jest pakiet, kt\u00f3rego potrzebujemy do obs\u0142ugi postu meta.<\/p>\n<p>Przejd\u017amy teraz do cz\u0119\u015bci JavaScript.<\/p>\n<p>Najpierw musimy wywo\u0142a\u0107 <code>[registerPlugin](https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/packages\/packages-plugins\/#registerPlugin)()<\/code>i przekaza\u0107 nasz komponent do renderowania panelu na pasku bocznym dokumentu Gutenberg. Ta funkcja jest dost\u0119pna w <code>wp.plugins<\/code>pakiecie, wi\u0119c destrukturyzuj\u0119 j\u0105 na g\u00f3rze. Lubi\u0119 utrzymywa\u0107 porz\u0105dek w swoich plikach, wi\u0119c tworz\u0119 kolejny plik; \u201eawp-custom-postmeta-fields.js&#8221;, aby zawiera\u0107 renderowany komponent i go zaimportowa\u0107.<\/p>\n<pre><code>const { registerPlugin } = wp.plugins;\n\u00a0\nimport AWP_Custom_Plugin from '.\/awp-custom-postmeta-fields';\n\u00a0\nregisterPlugin( 'my-custom-postmeta-plugin', {\n    render() {\n        return(&lt;AWP_Custom_Plugin \/&gt;);\n    }\n} );<\/code><\/pre>\n<h2>Pisanie naszego komponentu<\/h2>\n<p>Zacznijmy tworzy\u0107 podstawowy komponent, kt\u00f3ry nie robi nic innego ni\u017c po prostu siedzie\u0107 we w\u0142a\u015bciwym miejscu, wi\u0119c najpierw to usuniemy. Aby wyrenderowa\u0107 komponent na pasku bocznym Dokument Gutenberga, u\u017cywamy <code>[PluginDocumentSettingPanel](https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/slotfills\/plugin-document-setting-panel\/)<\/code>komponentu. Mo\u017cemy ustawi\u0107 atrybuty takie jak <code>title<\/code>, <code>icon<\/code>i <code>className<\/code>. A wszystko, co jest w \u015brodku, zostanie wyrenderowane na pasku bocznym dokumentu. Na razie wy\u015bwietlam tylko tekst \u201eCze\u015b\u0107&#8221;.<\/p>\n<pre><code>const { __ } = wp.i18n;\nconst { PluginDocumentSettingPanel } = wp.editPost;\nconst { PanelRow } = wp.components;\n\u00a0\nconst AWP_Custom_Plugin =() =&gt; {\n    return(\n        &lt;PluginDocumentSettingPanel title={ __( 'My Custom Post meta', 'txtdomain') } initialOpen=\"true\"&gt;\n            &lt;PanelRow&gt;\n                Hello there.\n            &lt;\/PanelRow&gt;\n        &lt;\/PluginDocumentSettingPanel&gt;\n    );\n}\n\u00a0\nexport default AWP_Custom_Plugin;<\/code><\/pre>\n<p>Z powy\u017cszym kodem (skompilowanym) otrzymujemy to:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153559-61e510828c932.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-153559-61e510828c932.png\" alt=\"Jak doda\u0107 pola Post Meta do paska bocznego dokumentu Gutenberg\" ><\/a><\/p>\n<p>Wspania\u0142y. Jednak chcemy doda\u0107 kilka danych wej\u015bciowych. Aby jednak po\u0142\u0105czy\u0107 te dane wej\u015bciowe z nasz\u0105 niestandardow\u0105 meta post, musimy skomponowa\u0107 nasz komponent z komponentami wy\u017cszego rz\u0119du <code>withSelect<\/code>(aby pobra\u0107 warto\u015bci meta postu) i <code>withDispatch<\/code>(aby zaktualizowa\u0107 warto\u015bci meta postu). Mo\u017ce si\u0119 to wydawa\u0107 nieco skomplikowane, je\u015bli wcze\u015bniej nie pracowa\u0142e\u015b z komponentami wy\u017cszego rz\u0119du, ale kiedy ju\u017c to ogarniesz, jest to ca\u0142kiem proste.<\/p>\n<p>Najpierw musimy zmieni\u0107 nasze <code>export<\/code>o\u015bwiadczenie. Zamiast zwraca\u0107 tylko nasz komponent, musimy skomponowa\u0107 go za pomoc\u0105 <code>withSelect<\/code>i <code>withDispatch<\/code>, zar\u00f3wno w <code>wp.data<\/code>pakiecie.<\/p>\n<p>Wewn\u0105trz <code>withSelect()<\/code>mamy dost\u0119p do pot\u0119\u017cnej <code>select()<\/code>funkcji. Za pomoc\u0105 <code>select()<\/code>mo\u017cemy pobra\u0107 warto\u015bci meta bie\u017c\u0105cego wpisu. Mo\u017cemy r\u00f3wnie\u017c pobra\u0107 aktualny typ posta, je\u015bli chcemy. Jak wspomnia\u0142em wcze\u015bniej, rejestruj\u0105c meta postu, mo\u017cemy ograniczy\u0107 meta posta do okre\u015blonego typu postu. Je\u015bli pobierzemy typ bie\u017c\u0105cego posta, mo\u017cemy w naszym komponencie upewni\u0107 si\u0119, \u017ce renderujemy nasz kod tylko wtedy, gdy mamy w\u0142a\u015bciwy typ posta. Wi\u0119cej o tym p\u00f3\u017aniej.<\/p>\n<p>W <code>withDispatch()<\/code>nim mo\u017cemy zdefiniowa\u0107 funkcje, kt\u00f3re mo\u017cemy uruchomi\u0107 w naszym komponencie. Tworzymy funkcj\u0119, kt\u00f3ra pos\u0142u\u017cy <code>dispatch()<\/code>do aktualizacji meta postu.<\/p>\n<p>Zmie\u0144my <code>export<\/code>stwierdzenie na to:<\/p>\n<pre><code>export default compose( [\n    withSelect( (select) =&gt; {     \n        return {\n            postMeta: select( 'core\/editor' ).getEditedPostAttribute( 'meta' ),\n            postType: select( 'core\/editor' ).getCurrentPostType(),\n        };\n    } ),\n    withDispatch( (dispatch) =&gt; {\n        return {\n            setPostMeta( newMeta) {\n                dispatch( 'core\/editor' ).editPost( { meta: newMeta } );\n            }\n        };\n    }) ] )( AWP_Custom_Plugin );<\/code><\/pre>\n<p>Musimy r\u00f3wnie\u017c zdestrukturyzowa\u0107 je z nast\u0119puj\u0105cych pakiet\u00f3w na pocz\u0105tku pliku:<\/p>\n<pre><code>const { compose } = wp.compose;\nconst { withSelect, withDispatch } = wp.data;<\/code><\/pre>\n<p>Dzi\u0119ki temu nasz <code>AWP_Custom_Plugin<\/code>komponent ma dost\u0119p do trzech nowych rekwizyt\u00f3w; <code>postMeta<\/code>kt\u00f3ry zawiera wszystkie warto\u015bci meta postu do bie\u017c\u0105cego posta; <code>postType<\/code>kt\u00f3ry zawiera typ aktualnego posta; i wreszcie funkcja <code>setPostMeta()<\/code>, kt\u00f3r\u0105 stworzyli\u015bmy <code>withDispatch()<\/code>, zaktualizuje meta postu.<\/p>\n<p>Tak wi\u0119c w naszej definicji komponentu mo\u017cemy zdestrukturyzowa\u0107 te trzy nowe w\u0142a\u015bciwo\u015bci;<\/p>\n<pre><code>const AWP_Custom_Plugin = ({ postType, postMeta, setPostMeta }) =&gt; {\n...<\/code><\/pre>\n<p>A teraz mo\u017cemy doda\u0107 dane wej\u015bciowe do naszego renderowania, upewniaj\u0105c si\u0119, \u017ce wy\u015bwietlaj\u0105 bie\u017c\u0105c\u0105 warto\u015b\u0107 i aktualizuj\u0105 meta post w zdarzeniu on change. Zarejestrowa\u0142em warto\u015b\u0107 logiczn\u0105 i ci\u0105g znak\u00f3w, wi\u0119c jako przyk\u0142ad dodam <code>ToggleControl<\/code>do prze\u0142\u0105cznika i prosty <code>TextControl<\/code>do wprowadzania tekstu.<\/p>\n<p>Je\u015bli nie masz pewno\u015bci co do wbudowanych komponent\u00f3w w WordPressie, mam ca\u0142kowicie darmowy e-book, kt\u00f3ry obejmuje prawie wi\u0119kszo\u015b\u0107 komponent\u00f3w dost\u0119pnych w Gutenbergu &#8211; w tym, jakie rekwizyty mo\u017cemy ustawi\u0107 dla ka\u017cdego z nich.<\/p>\n<p>Oto przyk\u0142ad, jak mo\u017ce wygl\u0105da\u0107 nasz komponent:<\/p>\n<pre><code>const { ToggleControl, TextControl, PanelRow } = wp.components;\n\u00a0\nconst AWP_Custom_Plugin = ({ postType, postMeta, setPostMeta }) =&gt; {\n    return(\n        &lt;PluginDocumentSettingPanel title={ __( 'My Custom Post meta', 'txtdomain') } icon=\"edit\" initialOpen=\"true\"&gt;\n            &lt;PanelRow&gt;\n                &lt;ToggleControl\n                    label={ __( 'You can toggle me on or off', 'txtdomain') }\n                    onChange={ (value) =&gt; setPostMeta( { _my_custom_bool: value }) }\n                    checked={ postMeta._my_custom_bool }\n                \/&gt;\n            &lt;\/PanelRow&gt;\n            &lt;PanelRow&gt;\n                &lt;TextControl\n                    label={ __( 'Write some text, if you like', 'txtdomain') }\n                    value={ postMeta._my_custom_text }\n                    onChange={ (value) =&gt; setPostMeta( { _my_custom_text: value }) }\n                \/&gt;\n            &lt;\/PanelRow&gt;\n        &lt;\/PluginDocumentSettingPanel&gt;\n    );\n}<\/code><\/pre>\n<p>Na linii <code>#9-10<\/code>i <code>#16-17<\/code>znajdujemy krytyczne cz\u0119\u015bci. Ustawiamy bie\u017c\u0105c\u0105 warto\u015b\u0107 wej\u015b\u0107 na <code>postMeta.&lt;your meta key here&gt;<\/code>i w ich zdarzeniu onChange uruchamiamy funkcj\u0119 <code>setPostMeta( { &lt;your meta key here&gt;: ... } )<\/code>na now\u0105 zaktualizowan\u0105 warto\u015b\u0107.<\/p>\n<p>Na koniec s\u0142owo o tym, jak ograniczy\u0107 sw\u00f3j komponent do okre\u015blonego typu postu. W naszym <code>withSelect()<\/code>podajemy typ aktualnego posta w prop <code>postType<\/code>. Wszystko, co musimy zrobi\u0107 w naszym komponencie, to por\u00f3wna\u0107 t\u0119 warto\u015b\u0107 z typem postu i zwr\u00f3ci\u0107 null, je\u015bli nie pasuje:<\/p>\n<pre><code>const AWP_Custom_Plugin = ({ postType, postMeta, setPostMeta }) =&gt; {  \n    if ('post' !== postType) return null;  \/\/ Will only render component for post type 'post'\n\u00a0\n    return(\n    ...<\/code><\/pre>\n<p>I to wszystko! Nasz kod powinien teraz dzia\u0142a\u0107. Ostateczny wynik powinien wygl\u0105da\u0107 mniej wi\u0119cej tak:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153559-61e51081c74ff.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-153559-61e51081c74ff.png\" alt=\"Jak doda\u0107 pola Post Meta do paska bocznego dokumentu Gutenberg\" ><\/a><\/p>\n<h2>Kod ko\u0144cowy<\/h2>\n<p>Rejestracja meta postu i kolejkowanie pliku Javascript:<\/p>\n<pre><code>add_action( 'init', function() {\n    register_post_meta( 'post', '_my_custom_bool', [\n        'show_in_rest' =&gt; true,\n        'single' =&gt; true,\n        'type' =&gt; 'boolean',\n    ] );\n\u00a0\n    register_post_meta( 'post', '_my_custom_text', [\n        'show_in_rest' =&gt; true,\n        'single' =&gt; true,\n        'type' =&gt; 'string',\n    ] );\n} );\n\u00a0\nadd_action( 'enqueue_block_editor_assets', function() {\n    wp_enqueue_script(\n        'awp-custom-meta-plugin', \n        get_template_directory_uri(). '\/assets\/js\/gutenberg\/plugin-awp-custom-postmeta.js', \n        [ 'wp-edit-post' ],\n        false,\n        false\n    );\n} );<\/code><\/pre>\n<p>Dwa pliki JavaScript:<\/p>\n<pre><code>const { registerPlugin } = wp.plugins;\n\u00a0\nimport AWP_Custom_Plugin from '.\/awp-custom-postmeta-fields';\n\u00a0\nregisterPlugin( 'my-custom-postmeta-plugin', {\n    render() {\n        return(&lt;AWP_Custom_Plugin \/&gt;);\n    }\n} );<\/code><\/pre>\n<pre><code>const { __ } = wp.i18n;\nconst { compose } = wp.compose;\nconst { withSelect, withDispatch } = wp.data;\n\u00a0\nconst { PluginDocumentSettingPanel } = wp.editPost;\nconst { ToggleControl, TextControl, PanelRow } = wp.components;\n\u00a0\nconst AWP_Custom_Plugin = ({ postType, postMeta, setPostMeta }) =&gt; {\n    if ('post' !== postType) return null;  \/\/ Will only render component for post type 'post'\n    return(\n        &lt;PluginDocumentSettingPanel title={ __( 'My Custom Post meta', 'txtdomain') } icon=\"edit\" initialOpen=\"true\"&gt;\n            &lt;PanelRow&gt;\n                &lt;ToggleControl\n                    label={ __( 'You can toggle me on or off', 'txtdomain') }\n                    onChange={ (value) =&gt; setPostMeta( { _my_custom_bool: value }) }\n                    checked={ postMeta._my_custom_bool }\n                \/&gt;\n            &lt;\/PanelRow&gt;\n            &lt;PanelRow&gt;\n                &lt;TextControl\n                    label={ __( 'Write some text, if you like', 'txtdomain') }\n                    value={ postMeta._my_custom_text }\n                    onChange={ (value) =&gt; setPostMeta( { _my_custom_text: value }) }\n                \/&gt;\n            &lt;\/PanelRow&gt;\n        &lt;\/PluginDocumentSettingPanel&gt;\n    );\n}\n\u00a0\nexport default compose( [\n    withSelect( (select) =&gt; {     \n        return {\n            postMeta: select( 'core\/editor' ).getEditedPostAttribute( 'meta' ),\n            postType: select( 'core\/editor' ).getCurrentPostType(),\n        };\n    } ),\n    withDispatch( (dispatch) =&gt; {\n        return {\n            setPostMeta( newMeta) {\n                dispatch( 'core\/editor' ).editPost( { meta: newMeta } );\n            }\n        };\n    }) ] )( AWP_Custom_Plugin );<\/code><\/pre>\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 przyjrzymy si\u0119, jak doda\u0107 niestandardowe ustawienia meta postu do paska bocznego WordPress Gutenberg w zak\u0142adce \u201eDokument\u201d.<\/p>\n","protected":false},"author":1,"featured_media":153560,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[897,721,721,940,940,897,1110,815,836,836,845,845,866,866,815],"tags":[1169],"class_list":["post-233403","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kod","category-deweloper","category-gutenberg-7","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\/233403","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=233403"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233403\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/153560"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=233403"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=233403"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=233403"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}