{"id":228971,"date":"2022-10-20T19:34:00","date_gmt":"2022-10-20T16:34:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228971"},"modified":"2022-11-09T05:00:25","modified_gmt":"2022-11-09T02:00:25","slug":"muotoile-viestisi-sisaeltoe-registerformattypellae","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/muotoile-viestisi-sisaeltoe-registerformattypellae\/","title":{"rendered":"Muotoile viestisi sis\u00e4lt\u00f6 registerFormatTypell\u00e4"},"content":{"rendered":"\n<p>Voit lis\u00e4t\u00e4 mukautettuja painikkeita WordPress Gutenbergin ty\u00f6kalupalkkiin melko helposti, mutta tiesitk\u00f6, ett\u00e4 voit my\u00f6s lis\u00e4t\u00e4 muototyyppis\u00e4\u00e4timi\u00e4 muotovalikkoon?<\/p>\n<p>T\u00e4ss\u00e4 oppaassa aiomme tarkastella, kuinka lis\u00e4t\u00e4 muotos\u00e4\u00e4din k\u00e4ytt\u00e4m\u00e4ll\u00e4 <code>registerFormatType<\/code>, jonka avulla voimme valita valitun tekstin korostusv\u00e4rin semanttisen <code>&lt;mark&gt;<\/code>HTML-tunnisteen avulla.<\/p>\n<p>Kaikki t\u00e4ss\u00e4 opetusohjelmassa k\u00e4ytetty koodi l\u00f6ytyy <strong>ilmaisesta<\/strong> <a href=\"https:\/\/wholesomecode.ltd\/plugins\/highlighter\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Highlighter-laajennuksesta<\/a>.<\/p>\n<p>On syyt\u00e4 huomata, ett\u00e4 et vain voit k\u00e4ytt\u00e4\u00e4 muotoja valittuun tekstiin lohkoissasi, vaan voit my\u00f6s k\u00e4ytt\u00e4\u00e4 niit\u00e4 muiden objektien lis\u00e4\u00e4miseen suoraan lohkoihin, kuten upotettuihin kuviin ja kuvakkeisiin.<\/p>\n<p>Muototyypin k\u00e4ytt\u00e4minen Highlighter-laajennuksella.<\/p>\n<p>Yll\u00e4 oleva video n\u00e4ytt\u00e4\u00e4 Highlighter-laajennuksen ja muototyyppimme toiminnassa. Hypp\u00e4\u00e4mme siihen.<\/p>\n<h2>Edellytykset<\/h2>\n<ul>\n<li>Lue <a href=\"https:\/\/wholesomecode.ltd\/guides\/creating-plugin-wordpress-gutenberg\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPress Block Editorin (Gutenberg) laajennuksen luominen<\/a> -opas, jotta saat etumatkan laajennuksen luomiseen.<\/li>\n<li>Vaihtoehtoisesti <a href=\"https:\/\/wholesomecode.ltd\/plugins\/highlighter\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">lataa ilmainen Highlighter-laajennus<\/a> ja katso tiedostoa<code>\/src\/formats\/highlight.js<\/code><\/li>\n<\/ul>\n<h2>M\u00e4\u00e4rit\u00e4 liit\u00e4nn\u00e4istiedostot<\/h2>\n<p>Jos olet noudattanut edellytyst\u00e4 ja noudattanut laajennusopasta, meid\u00e4n on edett\u00e4v\u00e4 ja poistettava joukko n\u00e4it\u00e4 tiedostoja.<\/p>\n<ul>\n<li>Poista src-kansiosta kaikki paitsi tiedostot <code>index.js<\/code>ja <code>style.scss<\/code>.<\/li>\n<li><code>index.js<\/code>Poista ja sis\u00e4lt\u00f6 <code>style.scss<\/code>kokonaan.<\/li>\n<li>Poista kansiosta kaikki <code>\/build<\/code>tiedostot. Uudistamme n\u00e4m\u00e4 my\u00f6hemmin.<\/li>\n<li>Poista <code>block.json<\/code>. Emme rakenna lohkoa t\u00e4n\u00e4\u00e4n, joten emme tarvitse t\u00e4t\u00e4.<\/li>\n<\/ul>\n<h3>Aseta komentosarjat jonoon<\/h3>\n<p>Lis\u00e4\u00e4 p\u00e4\u00e4laajennustiedostoon (<code>wholesome-plugin.php<\/code>jos olet noudattanut edellist\u00e4 opetusohjelmaa sanatarkasti) seuraava koodi lis\u00e4t\u00e4ksesi laajennuksen JavaScript- ja CSS-koodit.<\/p>\n<pre><code>&lt;?php\n\nfunction setup(): void {\n\n    load_plugin_textdomain( 'wholesome-highlighter', false, ROOT_DIR. 'languages' );\n\n    add_action( 'enqueue_block_editor_assets', __NAMESPACE__. 'enqueue_block_editor_assets', 10 );\n\n    add_action( 'enqueue_block_assets', __NAMESPACE__. 'enqueue_block_styles', 10 );\n}\n\nfunction enqueue_block_editor_assets(): void {\n\n    $asset_path = ROOT_DIR. '\/build\/index.asset.php';\n\n    if (! file_exists( $asset_path)) {\n        throw new Error(\n            esc_html__( 'You need to run `npm start` or `npm run build` in the root of the plugin \"wholesome-highlighter\" first.', 'wholesome-highlighter') );\n    }\n\n    $scripts = '\/build\/index.js';\n    $assets  = include $asset_path;\n\n    wp_enqueue_script(\n        PLUGIN_SLUG. '-block-scripts',\n        plugins_url( $scripts, ROOT_FILE ),\n        $assets['dependencies'],\n        $assets['version'],\n        false\n    );\n\n    wp_set_script_translations(\n        PLUGIN_SLUG. '-block-scripts',\n        'wholesome-highlighter',\n        ROOT_DIR. 'languages'\n    );\n}\nadd_action( 'plugins_loaded', __NAMESPACE__. 'setup' );\n\nfunction enqueue_block_styles(): void {\n\n    $styles = '\/build\/style-index.css';\n\n    wp_enqueue_style(\n        PLUGIN_SLUG. '-block-styles',\n        plugins_url( $styles, ROOT_FILE ),\n        array(),\n        filemtime( ROOT_DIR. $styles) );\n}\n\nadd_action( 'plugins_loaded', __NAMESPACE__. 'setup' );\n<\/code><\/pre>\n<ol>\n<li>Rekister\u00f6i muototyyppi<\/li>\n<\/ol>\n<hr \/>\n<p>Avaa <code>\/src\/index.js<\/code>tiedosto ja lis\u00e4\u00e4 seuraava koodi.<\/p>\n<pre><code>\nimport { RichTextToolbarButton } from '@wordpress\/block-editor';\nimport { __ } from '@wordpress\/i18n';\n\nconst HighlighterButton = ({ isActive, onChange, value}) =&gt; {\n    return (&lt;RichTextToolbarButton\n            icon='edit'\n            isActive={ isActive }\n            title={ __( 'Highlight', 'wholesome-highlighter') }\n        \/&gt;) };\n<\/code><\/pre>\n<p>T\u00e4m\u00e4 luo korostuspainikkeen, joka tulee n\u00e4kyviin muotovalikkoon. Nyt k\u00e4yt\u00e4mme <code>registerFormatType<\/code>muodon rekister\u00f6imiseen.<\/p>\n<p>Ensinn\u00e4kin meid\u00e4n on muokattava tuontiamme voidaksemme tuoda my\u00f6s <code>registerFormatType<\/code>osoitteesta <code>@wordpress\/rich-text<\/code>.<\/p>\n<pre><code>import { registerFormatType, toggleFormat } from '@wordpress\/rich-text';\n<\/code><\/pre>\n<p>Rekister\u00f6i sitten muoto lis\u00e4\u00e4m\u00e4ll\u00e4 muodon nimi (<code>wholesome\/highlighter<\/code>) ja v\u00e4litt\u00e4m\u00e4ll\u00e4 objekti, jolla on seuraavat ominaisuudet. <code>toggleFormat<\/code>k\u00e4ytet\u00e4\u00e4n my\u00f6hemmin klikkaustapahtumassamme.<\/p>\n<ul>\n<li><code>className<\/code>: Luokan nimi, joka lis\u00e4t\u00e4\u00e4n korostettua teksti\u00e4 ymp\u00e4r\u00f6iv\u00e4\u00e4n tunnisteeseen.<\/li>\n<li><code>edit<\/code>: Painike, jonka olemme aiemmin rekister\u00f6ineet.<\/li>\n<li><code>tagName<\/code>: Korostettuun tekstiin k\u00e4ytett\u00e4v\u00e4n tunnisteen tyyppi. T\u00e4ss\u00e4 tapauksessa k\u00e4yt\u00e4mme <code>&lt;mark&gt;<\/code>semanttisesti oikeaa tekstin korostuksen merkint\u00e4\u00e4.<\/li>\n<li><code>title<\/code>: muodon otsikko.<\/li>\n<\/ul>\n<pre><code>\nregisterFormatType(\n    'wholesome\/highlighter', {\n        className: 'wholesome-highlight',\n        edit: HighlighterButton,\n        tagName: 'mark',\n        title: __( 'Highlight', 'wholesome-highlighter' ),\n    }\n);\n<\/code><\/pre>\n<h3>K\u00e4sittele napsautusta<\/h3>\n<p>Nyt kun olemme lis\u00e4nneet painikkeen muotovalikkoon, meid\u00e4n tarvitsee vain k\u00e4sitell\u00e4 klikkaustapahtuma.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-168405-61e7cb11d77e2.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-168405-61e7cb11d77e2.png\" alt=\"Muotoile viestisi sis\u00e4lt\u00f6 registerFormatTypell\u00e4\" ><\/a><\/p>\n<p>Muokkaa tapahtumaa <code>RichTextToolbarButton<\/code>ja lis\u00e4\u00e4 se <code>onClick<\/code>.<\/p>\n<pre><code>&lt;RichTextToolbarButton\n  icon='edit'\n  isActive={ isActive }\n  onClick={() =&gt; {\n    onChange(\n      toggleFormat( value, {\n        type: 'wholesome\/highlighter',\n      }) );\n  } }\n  title={ __( 'Highlight', 'wholesome-highlighter') }\n\/&gt;\n<\/code><\/pre>\n<p>Triggeriss\u00e4 kutsumme <code>toggleFormat<\/code>arvon v\u00e4litt\u00e4mist\u00e4 (joka on korostettu teksti) ja v\u00e4lit\u00e4mme objektin, jonka <code>type<\/code>ominaisuus on asetettu muotomme nimeen.<\/p>\n<p>Nyt kun painiketta napsautetaan aluksi, se lis\u00e4\u00e4 <code>&lt;mark&gt;<\/code>HTML-tunnisteen valittuun tekstiin, ja kun sit\u00e4 painetaan uudelleen, se vaihtaa muotoa poistamalla sen uudelleen.<\/p>\n<p>Jos haluat n\u00e4hd\u00e4 koodin kokonaisuudessaan ja n\u00e4hd\u00e4ksesi viimeisimm\u00e4t p\u00e4ivitykset <a href=\"https:\/\/github.com\/wholesomecode\/wholesome-highlighter\/blob\/master\/src\/formats\/highlight.js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">, katso koko <code>\/src\/formats\/highlight.js<\/code>tiedosto Highlighter-laajennuksessa<\/a>.<\/p>\n<p>Yll\u00e4 oleva koodi rekister\u00f6i lohkon kaikille lohkotyypeille. Jos kuitenkin haluat lohkon n\u00e4kyv\u00e4n vain tietyiss\u00e4 lohkotyypeiss\u00e4, se voidaan my\u00f6s tehd\u00e4.<\/p>\n<p>T\u00e4t\u00e4 varten meid\u00e4n on k\u00e4ytett\u00e4v\u00e4 Higher Order -komponenttia ifCondition ja m\u00e4\u00e4ritett\u00e4v\u00e4 valitsemamme lohkotyyppi k\u00e4ytt\u00e4m\u00e4ll\u00e4 Select-toimintoa.<\/p>\n<p>Voit tehd\u00e4 t\u00e4m\u00e4n lis\u00e4\u00e4m\u00e4ll\u00e4 seuraavat tuontitiedostot tiedostosi alkuun.<\/p>\n<pre><code>import { ifCondition  } from '@wordpress\/compose';\nimport { useSelect } from '@wordpress\/data';\n<\/code><\/pre>\n<p><code>registerFormatType<\/code>Lis\u00e4\u00e4 koodilohkon yl\u00e4puolelle seuraava koodinkirjoituslohko.<\/p>\n<pre><code>\nvar HighlighterButtonContainer = ifCondition( (props) =&gt; {\n    const selectedBlock = useSelect( (select) =&gt; select('core\/block-editor').getSelectedBlock() );\n    return (selectedBlock &amp;&amp;\n        selectedBlock.name === 'core\/paragraph'\n    ); \n} )( HighlighterButton );\n<\/code><\/pre>\n<p>Kuten koodista n\u00e4kyy, jos valittu lohko on <code>core\/paragraph<\/code>korkeamman j\u00e4rjestyksen komponentti <code>ifCondition<\/code>, palauttaa tosi, ja antaa siksi painikkeen render\u00f6id\u00e4.<\/p>\n<p>Meid\u00e4n tarvitsee vain siirt\u00e4\u00e4 juuri luomamme s\u00e4il\u00f6 <code>registerBlockType<\/code>koodilohkoon ja koodimme on valmis.<\/p>\n<pre><code>\nregisterFormatType(\n    'wholesome\/highlighter', {\n        className: 'wholesome-highlight',\n        edit: HighlighterButtonContainer,\n        tagName: 'mark',\n        title: __( 'Highlight', 'wholesome-highlighter' ),\n    }\n);\n<\/code><\/pre>\n<p>Jos haluat n\u00e4hd\u00e4 koodin kokonaisuudessaan <a href=\"https:\/\/github.com\/wholesomecode\/wholesome-highlighter\/blob\/master\/src\/formats\/highlight-paragraph.js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">, katso <code>\/src\/formats\/highlight-paragraph.js<\/code>tiedostoa Highlighter-laajennuksessa<\/a>.<\/p>\n<ul>\n<li>Vie asioita pidemm\u00e4lle <a href=\"https:\/\/wholesomecode.ltd\/blog\/use-a-modal-popup-to-add-additional-attributes-with-registerblockformat\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">lis\u00e4\u00e4m\u00e4ll\u00e4 mukautettuja attribuutteja mukautettuun muotoon modaalisen ponnahdusikkunan avulla<\/a>.<\/li>\n<li><a href=\"https:\/\/wholesomecode.ltd\/guides\/add-sidebar-controls-to-your-custom-wordpress-block-with-inspectorcontrols\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Lis\u00e4\u00e4 lohkosivupalkki InspectorControlsilla<\/a><\/li>\n<li>Katso <a href=\"https:\/\/wholesomecode.ltd\/guides\/create-settings-page-wordpress-gutenberg-components\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">vaihtoehto- ja asetussivun rakentaminen Gutenbergin komponenteilla<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/wholesomecode.ltd\" class=\"external external_icon\">wholesomecode.ltd<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voit lis\u00e4t\u00e4 mukautettuja painikkeita WordPress Gutenbergin ty\u00f6kalupalkkiin melko helposti, mutta tiesitk\u00f6, ett\u00e4 voit my\u00f6s lis\u00e4t\u00e4 muototyyppis\u00e4\u00e4timi\u00e4 muotovalikkoon?T\u00e4ss\u00e4 oppaassa aiomme&#8230;<\/p>\n","protected":false},"author":1,"featured_media":221122,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[750,719,895,917,843],"tags":[1166],"class_list":["post-228971","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-avoin-laehdekoodi","category-kehittaejae","category-koodi","category-muut","category-opetusohjelmia","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/228971","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=228971"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/228971\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/221122"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=228971"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=228971"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=228971"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}