{"id":233377,"date":"2023-02-13T10:53:00","date_gmt":"2023-02-13T07:53:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233377"},"modified":"2022-11-10T23:22:03","modified_gmt":"2022-11-10T20:22:03","slug":"hur-man-laegger-till-inlaeggsmetafaelt-i-gutenberg-dokumentets-sidofaelt","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/hur-man-laegger-till-inlaeggsmetafaelt-i-gutenberg-dokumentets-sidofaelt\/","title":{"rendered":"Hur man l\u00e4gger till inl\u00e4ggsmetaf\u00e4lt i Gutenberg-dokumentets sidof\u00e4lt"},"content":{"rendered":"\n<p>I det h\u00e4r inl\u00e4gget kommer vi att titta p\u00e5 hur man l\u00e4gger till anpassade inl\u00e4ggsmetainst\u00e4llningar i Gutenbergs sidof\u00e4lt, p\u00e5 fliken &quot;Dokument&quot;, snarare \u00e4n att f\u00f6rlita sig p\u00e5 att l\u00e4gga till metaboxar p\u00e5 det traditionella (och \u00e4rligt talat mycket mer manuella) s\u00e4ttet.<\/p>\n<p>Om du har arbetat med WordPress ett tag innan Gutenberg var en grej, \u00e4r du f\u00f6rmodligen bekant med att l\u00e4gga till anpassad inl\u00e4ggsmeta med <code>[add_meta_box](https:\/\/developer.wordpress.org\/reference\/functions\/add_meta_box\/)()<\/code>. Denna funktion l\u00e5ter dig l\u00e4gga till en metabox med ditt anpassade inneh\u00e5ll antingen l\u00e4ngst ner eller p\u00e5 sidan n\u00e4r du redigerar ett inl\u00e4gg. Denna metod fungerar fortfarande, \u00e4ven i Gutenberg-redigeraren!<\/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=\"Hur man l\u00e4gger till inl\u00e4ggsmetaf\u00e4lt i Gutenberg-dokumentets sidof\u00e4lt\" ><\/a><\/p>\n<p>Det ser dock lite avigt ut j\u00e4mf\u00f6rt med resten av Gutenbergs sidof\u00e4ltsinneh\u00e5ll. Och f\u00f6r att inte n\u00e4mna, du skulle beh\u00f6va skriva inmatningskod manuellt (kryssruta, textinmatningar etc) med PHP och \u00e4ven skriva ytterligare kod f\u00f6r att spara dem n\u00e4r inl\u00e4gget uppdateras. Och om du ville att dina inl\u00e4ggsmetainst\u00e4llningar skulle vara dynamiska (s\u00e4g att du ville d\u00f6lja ett f\u00e4lt om inte n\u00e5got annat f\u00e4lt var aktiverat), s\u00e5 m\u00e5ste du manuellt st\u00e4lla ett skript i k\u00f6 och ja, du gissade r\u00e4tt, hantera den dynamiska logiken manuellt att g\u00f6mma sig och visa. Allt detta \u00e4r nu f\u00f6r\u00e5ldrat och gjort enklare med den nya Javascript-baserade Gutenberg-redigeraren. Vi kan ganska enkelt g\u00f6ra n\u00e5got s\u00e5nt h\u00e4r:<\/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=\"Hur man l\u00e4gger till inl\u00e4ggsmetaf\u00e4lt i Gutenberg-dokumentets sidof\u00e4lt\" ><\/a><\/p>\n<h2>Processen<\/h2>\n<p>Processen \u00e4r som f\u00f6ljer:<\/p>\n<ul>\n<li>Vi registrerar varje anpassad postmeta-nyckel vi vill l\u00e4gga till i PHP med hj\u00e4lp av <code>[register_post_meta](https:\/\/developer.wordpress.org\/reference\/functions\/register_post_meta\/)()<\/code>, och st\u00e4ller in den som tillg\u00e4nglig i WP REST API. Detta \u00e4r ett n\u00f6dv\u00e4ndigt steg f\u00f6r att g\u00f6ra inl\u00e4ggets meta tillg\u00e4nglig i Gutenberg-redigeraren.<\/li>\n<li>Vi skapar en Javascript-fil och k\u00f6ar den specifikt till editorn (endast).<\/li>\n<li>Inuti Javascript-filen registrerar vi ett plugin <code>[registerPlugin](https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/packages\/packages-plugins\/#registerPlugin)()<\/code>som s\u00e4ger \u00e5t det att rendera v\u00e5r komponent.<\/li>\n<li>Inuti den komponenten kan vi mata ut vad vi beh\u00f6ver. Vi kan anv\u00e4nda WordPresss inbyggda komponenter f\u00f6r att enkelt rendera olika typer av inst\u00e4llningar. Och med hj\u00e4lp av WordPress-datapaket kan vi h\u00e4mta och uppdatera inl\u00e4ggets metav\u00e4rden direkt n\u00e4r de \u00e4ndras.<\/li>\n<\/ul>\n<p>L\u00e5t oss g\u00e5 rakt in i det och b\u00f6rja med PHP-delen; registrera inl\u00e4gget meta.<\/p>\n<h2>Registrerar inl\u00e4gg meta<\/h2>\n<p>F\u00f6r varje inl\u00e4ggsmeta du vill l\u00e4gga till i Gutenbergs sidof\u00e4lt m\u00e5ste du registrera dig med <code>[register_post_meta](https:\/\/developer.wordpress.org\/reference\/functions\/register_post_meta\/)()<\/code>. Detta \u00e4r n\u00f6dv\u00e4ndigt f\u00f6r att g\u00f6ra dem tillg\u00e4ngliga via WP REST API (som Gutenberg anv\u00e4nder) och d\u00e4rmed tillg\u00e4ngliga i v\u00e5rt Javascript.<\/p>\n<p>I ditt temas <code>functions.php<\/code>fil eller n\u00e5gon annan aktiv PHP-fil, l\u00e4gg till en funktion kopplad till &#8217; <code>init<\/code>&#8217;-kroken. Inuti funktionen upprepar du a <code>register_post_meta()<\/code>f\u00f6r varje anpassad postmeta du vill l\u00e4gga till. Funktionen tar tre argument; f\u00f6rsta parametern \u00e4r inl\u00e4ggstypen du vill registrera meta f\u00f6r (st\u00e4ll in som tom str\u00e4ng f\u00f6r alla inl\u00e4ggstyper). Den andra parametern \u00e4r meta-nyckelnamnet f\u00f6r din meta. Och den tredje \u00e4r en rad inst\u00e4llningar. Det \u00e4r h\u00e4r vi definierar att denna meta ska vara tillg\u00e4nglig i WP REST API genom att s\u00e4tta &#8217; <code>show_in_rest<\/code>&#8217; p\u00e5 sant.<\/p>\n<p>L\u00e5t oss till exempel s\u00e4ga att jag vill l\u00e4gga till en v\u00e4xel p\u00e5\/av och en textinmatning till redigerarens sidof\u00e4lt. Det betyder att jag efterlyser <code>register_post_meta()<\/code>en boolesk respektive en str\u00e4ngv\u00e4rdestyp. Jag vill ocks\u00e5 begr\u00e4nsa dessa inl\u00e4ggsmeta till enbart inl\u00e4ggstyp &#8217;inl\u00e4gg&#8217;. Det skulle se ut ungef\u00e4r s\u00e5 h\u00e4r:<\/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>Nu har jag en post-meta-nyckel <code>_my_custom_bool<\/code>och <code>_my_custom_text<\/code>klar och tillg\u00e4nglig i Gutenberg. Jag rekommenderar att du byter namn p\u00e5 dem till n\u00e5got som \u00e4r vettigt f\u00f6r dig.<\/p>\n<h2>Registrera v\u00e5rt Javascript-plugin<\/h2>\n<p>F\u00f6r v\u00e5rt n\u00e4sta steg l\u00e4gger vi till en Javascript-fil och ser till att st\u00e4lla den i k\u00f6 med PHP.<\/p>\n<p>T\u00e4nk p\u00e5 att jag skriver Javascript-koden i ES6-syntax. Det betyder att jag har st\u00e4llt in ett webbpaket\/Babel-konfiguration f\u00f6r att kompilera min fil till en separat l\u00e4sbar Javascript-fil f\u00f6r webbl\u00e4saren.<\/p>\n<p>Jag har en guide om hur du st\u00e4ller in detta om du \u00e4r os\u00e4ker p\u00e5 hur det fungerar:<\/p>\n<p>Vi m\u00e5ste se till att WordPress laddar v\u00e5rt skript i editorn. Vi g\u00f6r detta genom att koppla en funktion till <code>enqueue_block_editor_assets<\/code>och anropa <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>Jag antar att du \u00e4r bekant med hur man st\u00e4ller skript i k\u00f6 och kan ers\u00e4tta v\u00e4rdena med dina egna. Som andra parameter tillhandah\u00e5ller jag s\u00f6kv\u00e4gen till byggfilen (inte k\u00e4llfilen). F\u00f6r att s\u00e4kerst\u00e4lla att v\u00e5rt skript inte laddas f\u00f6r tidigt, st\u00e4ller jag in &#8217; <code>wp-edit-post<\/code>&#8217; som ett beroende. Det \u00e4r paketet vi beh\u00f6ver f\u00f6r att hantera post-meta.<\/p>\n<p>L\u00e5t oss nu g\u00e5 vidare till Javascript-delen.<\/p>\n<p>F\u00f6rst m\u00e5ste vi anropa <code>[registerPlugin](https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/packages\/packages-plugins\/#registerPlugin)()<\/code>och skicka vidare v\u00e5r komponent f\u00f6r att rendera panelen i Gutenberg-dokumentets sidof\u00e4lt. Denna funktion finns i <code>wp.plugins<\/code>paketet, s\u00e5 jag destrukturerar den \u00f6verst. Jag gillar att h\u00e5lla ordning p\u00e5 mina filer, s\u00e5 jag skapar en annan fil; &quot;awp-custom-postmeta-fields.js&quot; f\u00f6r att inneh\u00e5lla den renderade komponenten och importera den.<\/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>Att skriva v\u00e5r komponent<\/h2>\n<p>L\u00e5t oss b\u00f6rja skapa en grundl\u00e4ggande komponent som inte g\u00f6r n\u00e5got annat \u00e4n att bara sitta d\u00e4r p\u00e5 r\u00e4tt plats, s\u00e5 vi f\u00e5r det ur v\u00e4gen f\u00f6rst. F\u00f6r att rendera en komponent i Gutenbergs dokumentsidof\u00e4lt anv\u00e4nder vi <code>[PluginDocumentSettingPanel](https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/slotfills\/plugin-document-setting-panel\/)<\/code>komponenten. Vi kan st\u00e4lla in attribut som en <code>title<\/code>, <code>icon<\/code>och <code>className<\/code>. Och vad som \u00e4n finns inuti kommer att \u00e5terges i dokumentets sidof\u00e4lt. F\u00f6r nu matar jag bara ut lite text &quot;Hej d\u00e4r.&quot;<\/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>Med ovanst\u00e5ende kod (kompilerad) f\u00e5r vi detta:<\/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=\"Hur man l\u00e4gger till inl\u00e4ggsmetaf\u00e4lt i Gutenberg-dokumentets sidof\u00e4lt\" ><\/a><\/p>\n<p>Grymt bra. Men vi vill l\u00e4gga till n\u00e5gra ing\u00e5ngar. Men f\u00f6r att kunna koppla dessa ing\u00e5ngar med v\u00e5r anpassade postmeta m\u00e5ste vi komponera v\u00e5r komponent med komponenterna av h\u00f6gre ordning <code>withSelect<\/code>(f\u00f6r att h\u00e4mta postmetav\u00e4rdena) och <code>withDispatch<\/code>(f\u00f6r att uppdatera postmetav\u00e4rdena). Det kan tyckas lite komplicerat om du inte har arbetat med komponenter av h\u00f6gre ordning tidigare, men n\u00e4r du v\u00e4l lindar huvudet runt det \u00e4r det ganska enkelt.<\/p>\n<p>Vi m\u00e5ste f\u00f6rst \u00e4ndra v\u00e5rt <code>export<\/code>uttalande. Ist\u00e4llet f\u00f6r att bara returnera v\u00e5r komponent ensam m\u00e5ste vi komponera den med <code>withSelect<\/code>och <code>withDispatch<\/code>, b\u00e5da i <code>wp.data<\/code>paketet.<\/p>\n<p>Inuti <code>withSelect()<\/code>har vi tillg\u00e5ng till den kraftfulla <code>select()<\/code>funktionen. Med hj\u00e4lp av <code>select()<\/code>kan vi h\u00e4mta det aktuella inl\u00e4ggets metav\u00e4rden. Vi kan ocks\u00e5 h\u00e4mta den aktuella posttypen, om vi vill. Som jag n\u00e4mnde tidigare n\u00e4r vi registrerade inl\u00e4ggsmeta, kan vi begr\u00e4nsa inl\u00e4ggsmetas till en specifik inl\u00e4ggstyp. Om vi \u200b\u200bh\u00e4mtar det aktuella inl\u00e4ggets inl\u00e4ggstyp kan vi i v\u00e5r komponent se till att endast rendera v\u00e5r kod om vi har r\u00e4tt inl\u00e4ggstyp. Mer om det senare.<\/p>\n<p>I <code>withDispatch()<\/code>kan vi definiera funktioner som vi kan k\u00f6ra i v\u00e5r komponent. Vi g\u00f6r en funktion som kommer att anv\u00e4nda <code>dispatch()<\/code>f\u00f6r att uppdatera inl\u00e4ggets meta.<\/p>\n<p>L\u00e5t oss \u00e4ndra <code>export<\/code>uttalandet till detta:<\/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>Vi m\u00e5ste ocks\u00e5 destrukturera dessa fr\u00e5n f\u00f6ljande paket i toppen av filen:<\/p>\n<pre><code>const { compose } = wp.compose;\nconst { withSelect, withDispatch } = wp.data;<\/code><\/pre>\n<p>Med detta har v\u00e5r <code>AWP_Custom_Plugin<\/code>komponent tillg\u00e5ng till tre nya rekvisita; <code>postMeta<\/code>som inneh\u00e5ller alla inl\u00e4ggsmetav\u00e4rden till det aktuella inl\u00e4gget; <code>postType<\/code>som inneh\u00e5ller det aktuella inl\u00e4ggets inl\u00e4ggstyp; och slutligen funktionen <code>setPostMeta()<\/code>vi gjorde i <code>withDispatch()<\/code>som kommer att uppdatera inl\u00e4ggets meta.<\/p>\n<p>S\u00e5 i v\u00e5r komponentdefinition kan vi destrukturera dessa tre nya rekvisita;<\/p>\n<pre><code>const AWP_Custom_Plugin = ({ postType, postMeta, setPostMeta }) =&gt; {\n...<\/code><\/pre>\n<p>Och nu kan vi l\u00e4gga till n\u00e5gra ing\u00e5ngar till v\u00e5r rendering, se till att de visar det aktuella v\u00e4rdet och att de uppdaterar inl\u00e4ggets meta i h\u00e4ndelsen vid \u00e4ndring. Jag registrerade en boolean och en str\u00e4ng, s\u00e5 som ett exempel l\u00e4gger jag till en <code>ToggleControl<\/code>f\u00f6r en v\u00e4xling och en enkel <code>TextControl<\/code>f\u00f6r en textinmatning.<\/p>\n<p>Om du \u00e4r os\u00e4ker p\u00e5 de inbyggda komponenterna i WordPress har jag en helt gratis e-bok som t\u00e4cker i stort sett de flesta komponenter som finns tillg\u00e4ngliga i Gutenberg- inklusive vilka rekvisita vi kan st\u00e4lla in f\u00f6r var och en.<\/p>\n<p>H\u00e4r \u00e4r ett exempel p\u00e5 hur v\u00e5r komponent kan se ut:<\/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>Vid linjen <code>#9-10<\/code>och <code>#16-17<\/code>vi hittar de kritiska delarna. Vi st\u00e4ller in ing\u00e5ngarnas aktuella v\u00e4rde till <code>postMeta.&lt;your meta key here&gt;<\/code>och i deras onChange-h\u00e4ndelse k\u00f6r vi funktionen <code>setPostMeta( { &lt;your meta key here&gt;: ... } )<\/code>till det nya uppdaterade v\u00e4rdet.<\/p>\n<p>Till sist ett ord om hur du begr\u00e4nsar din komponent till en specifik inl\u00e4ggstyp. I v\u00e5r <code>withSelect()<\/code>passerar vi den aktuella postens inl\u00e4ggstyp i rekvisiten <code>postType<\/code>. Allt vi beh\u00f6ver g\u00f6ra i v\u00e5r komponent \u00e4r att j\u00e4mf\u00f6ra detta v\u00e4rde med en posttyp och returnera null om det inte matchar:<\/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>Och det \u00e4r allt! V\u00e5r kod b\u00f6r nu fungera. Slutresultatet borde vara n\u00e5got i stil med:<\/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=\"Hur man l\u00e4gger till inl\u00e4ggsmetaf\u00e4lt i Gutenberg-dokumentets sidof\u00e4lt\" ><\/a><\/p>\n<h2>Slutlig kod<\/h2>\n<p>Registrera inl\u00e4ggsmeta och k\u00f6a Javascript-filen:<\/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>De tv\u00e5 Javascript-filerna:<\/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\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I det h\u00e4r inl\u00e4gget kommer vi att titta p\u00e5 hur man l\u00e4gger till anpassade inl\u00e4ggsmetainst\u00e4llningar i WordPress Gutenbergs sidof\u00e4lt, p\u00e5 fliken &#8221;Dokument&#8221;.<\/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":[901,724,838,942,942,848,901,1110,818,818,838,848,724,868,868],"tags":[1173],"class_list":{"0":"post-233377","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-koda","8":"category-utvecklaren","9":"category-guide-foer-nyboerjare","10":"category-gutenberg-9","12":"category-handledningar","14":"category-n-a","15":"category-plugins-3","20":"category-wordpress-9","22":"tag-affiai-sv"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/233377","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=233377"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/233377\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/153560"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=233377"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=233377"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=233377"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}