{"id":228303,"date":"2022-10-20T19:24:00","date_gmt":"2022-10-20T16:24:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228303"},"modified":"2022-11-09T01:46:53","modified_gmt":"2022-11-08T22:46:53","slug":"formatera-ditt-inlaeggsinnehaall-med-registerformattype","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/formatera-ditt-inlaeggsinnehaall-med-registerformattype\/","title":{"rendered":"Formatera ditt inl\u00e4ggsinneh\u00e5ll med registerFormatType"},"content":{"rendered":"\n<p>Du kan l\u00e4gga till anpassade knappar till verktygsf\u00e4ltet i WordPress Gutenberg ganska enkelt, men visste du att du ocks\u00e5 kan l\u00e4gga till formattypkontroller i formatmenyn?<\/p>\n<p>I den h\u00e4r guiden kommer vi att titta p\u00e5 hur man l\u00e4gger till en formatkontroll <code>registerFormatType<\/code>som g\u00f6r att vi kan v\u00e4lja markeringsf\u00e4rgen f\u00f6r vald text med hj\u00e4lp av den semantiska <code>&lt;mark&gt;<\/code>HTML-taggen.<\/p>\n<p>All kod som anv\u00e4nds i denna handledning finns i det <strong>kostnadsfria<\/strong> <a href=\"https:\/\/wholesomecode.ltd\/plugins\/highlighter\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">insticksprogrammet &#8217;Highlighter&#8217;<\/a>.<\/p>\n<p>Det \u00e4r v\u00e4rt att notera att du inte bara kan anv\u00e4nda format p\u00e5 vald text i dina block, utan du kan ocks\u00e5 anv\u00e4nda dem f\u00f6r att infoga andra objekt direkt i block, till exempel inlinebilder och ikoner.<\/p>\n<p>Anv\u00e4nda en formattyp med hj\u00e4lp av Highlighter-plugin.<\/p>\n<p>Videon ovan visar Highlighter-pluginen och v\u00e5r formattyp i aktion. L\u00e5t oss hoppa till det.<\/p>\n<h2>F\u00f6ruts\u00e4ttningar<\/h2>\n<ul>\n<li>L\u00e4s guiden <a href=\"https:\/\/wholesomecode.ltd\/guides\/creating-plugin-wordpress-gutenberg\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Skapa ett plugin f\u00f6r WordPress Block Editor (Gutenberg)<\/a> s\u00e5 att du kan f\u00e5 ett f\u00f6rspr\u00e5ng med att skapa plugin.<\/li>\n<li>Du kan eventuellt <a href=\"https:\/\/wholesomecode.ltd\/plugins\/highlighter\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ladda ner det kostnadsfria &quot;Highlighter&quot;-pluginet<\/a> och titta p\u00e5 filen<code>\/src\/formats\/highlight.js<\/code><\/li>\n<\/ul>\n<h2>Konfigurera plugin-filerna<\/h2>\n<p>Om du har f\u00f6ljt f\u00f6ruts\u00e4ttningen och f\u00f6ljt pluginguiden m\u00e5ste vi g\u00e5 vidare och ta bort ett g\u00e4ng av dessa filer.<\/p>\n<ul>\n<li>Ta bort allt f\u00f6rutom filerna <code>index.js<\/code>och i src-mappen.<code>style.scss<\/code><\/li>\n<li>Ta bort inneh\u00e5llet i <code>index.js<\/code>och <code>style.scss<\/code>helt.<\/li>\n<li><code>\/build<\/code>Ta bort alla filer i mappen. Vi kommer att \u00e5terskapa dessa senare.<\/li>\n<li>Ta bort <code>block.json<\/code>. Vi bygger inte ett block idag, s\u00e5 vi beh\u00f6ver inte det h\u00e4r.<\/li>\n<\/ul>\n<h3>St\u00e4ll skripten i k\u00f6<\/h3>\n<p>I huvudpluginfilen (<code>wholesome-plugin.php<\/code>om du har f\u00f6ljt f\u00f6reg\u00e5ende handledning ordagrant) l\u00e4gg till f\u00f6ljande kod f\u00f6r att st\u00e4lla JavaScript och CSS f\u00f6r din plugin.<\/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>Registrera formattyp<\/li>\n<\/ol>\n<hr \/>\n<p>\u00d6ppna din <code>\/src\/index.js<\/code>fil och l\u00e4gg till f\u00f6ljande kod.<\/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>Detta skapar v\u00e5r \u00f6verstrykningsknapp som visas i formatmenyn. Nu kommer vi att anv\u00e4nda <code>registerFormatType<\/code>f\u00f6r att registrera formatet.<\/p>\n<p>F\u00f6rst m\u00e5ste vi redigera v\u00e5ra importer f\u00f6r att \u00e4ven importera <code>registerFormatType<\/code>fr\u00e5n <code>@wordpress\/rich-text<\/code>.<\/p>\n<pre><code>import { registerFormatType, toggleFormat } from '@wordpress\/rich-text';\n<\/code><\/pre>\n<p>Registrera sedan formatet genom att l\u00e4gga till formatets namn (<code>wholesome\/highlighter<\/code>), och skicka in ett objekt med f\u00f6ljande egenskaper. <code>toggleFormat<\/code>kommer att anv\u00e4ndas senare f\u00f6r v\u00e5rt klickevenemang.<\/p>\n<ul>\n<li><code>className<\/code>: Klassnamnet som kommer att l\u00e4ggas till taggen som omger den markerade texten.<\/li>\n<li><code>edit<\/code>: Knappen som vi tidigare registrerat.<\/li>\n<li><code>tagName<\/code>: Typen av tagg som kommer att till\u00e4mpas p\u00e5 den markerade texten. I det h\u00e4r fallet anv\u00e4nder vi <code>&lt;mark&gt;<\/code>som \u00e4r semantiskt korrekt markering f\u00f6r en textmarkering.<\/li>\n<li><code>title<\/code>: Formatets titel.<\/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>Hantera klicket<\/h3>\n<p>Nu n\u00e4r vi har lagt till knappen i formatmenyn beh\u00f6ver vi bara hantera klickh\u00e4ndelsen.<\/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=\"Formatera ditt inl\u00e4ggsinneh\u00e5ll med registerFormatType\" ><\/a><\/p>\n<p>Redigera <code>RichTextToolbarButton<\/code>och l\u00e4gg till <code>onClick<\/code>h\u00e4ndelsen.<\/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>P\u00e5 triggern anropar vi <code>toggleFormat<\/code>passing in v\u00e4rdet (som \u00e4r den markerade texten) och skickar ett objekt med <code>type<\/code>egenskapen inst\u00e4lld p\u00e5 namnet p\u00e5 v\u00e5rt format.<\/p>\n<p>N\u00e4r du nu klickar p\u00e5 knappen initialt kommer den att applicera <code>&lt;mark&gt;<\/code>HTML-taggen p\u00e5 den markerade texten, och n\u00e4r du klickar igen kommer den att v\u00e4xla format genom att ta bort den igen.<\/p>\n<p>F\u00f6r att se koden i sin helhet och f\u00f6r att se de senaste uppdateringarna, <a href=\"https:\/\/github.com\/wholesomecode\/wholesome-highlighter\/blob\/master\/src\/formats\/highlight.js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ta en titt p\u00e5 hela <code>\/src\/formats\/highlight.js<\/code>filen i Highlighter-plugin<\/a>.<\/p>\n<p>Koden ovan kommer att registrera blocket f\u00f6r alla blocktyper. Men om du vill att blocket endast ska visas p\u00e5 vissa blocktyper kan det ocks\u00e5 g\u00f6ras.<\/p>\n<p>F\u00f6r att g\u00f6ra detta m\u00e5ste vi anv\u00e4nda Higher Order Component ifCondition och anv\u00e4ndaSelect f\u00f6r att best\u00e4mma blocktypen som vi har valt.<\/p>\n<p>F\u00f6r att g\u00f6ra detta l\u00e4gg till f\u00f6ljande importer \u00f6verst i filen.<\/p>\n<pre><code>import { ifCondition  } from '@wordpress\/compose';\nimport { useSelect } from '@wordpress\/data';\n<\/code><\/pre>\n<p>L\u00e4gg till f\u00f6ljande kodblock ovanf\u00f6r <code>registerFormatType<\/code>kodblocket.<\/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>Som du kan se av koden, om blocket som v\u00e4ljs \u00e4r kommer <code>core\/paragraph<\/code>Higher Order-komponenten <code>ifCondition<\/code>att returnera sant och d\u00e4rf\u00f6r till\u00e5ta knappen att rendera.<\/p>\n<p>Allt vi beh\u00f6ver g\u00f6ra nu \u00e4r att skicka beh\u00e5llaren vi just har skapat till <code>registerBlockType<\/code>kodblocket och v\u00e5r kod \u00e4r klar.<\/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>F\u00f6r att se koden i sin helhet, <a href=\"https:\/\/github.com\/wholesomecode\/wholesome-highlighter\/blob\/master\/src\/formats\/highlight-paragraph.js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ta en titt p\u00e5 <code>\/src\/formats\/highlight-paragraph.js<\/code>filen i Highlighter-plugin<\/a>.<\/p>\n<ul>\n<li>Ta saker l\u00e4ngre genom <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\">att l\u00e4gga till anpassade attribut till ditt anpassade format med en modal popover<\/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\">L\u00e4gg till en blockad sidof\u00e4lt med InspectorControls<\/a><\/li>\n<li>Titta p\u00e5 att bygga en <a href=\"https:\/\/wholesomecode.ltd\/guides\/create-settings-page-wordpress-gutenberg-components\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">alternativ- och inst\u00e4llningssida med hj\u00e4lp av Gutenberg-komponenter<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/wholesomecode.ltd\" class=\"external external_icon\">wholesomecode.ltd<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Du kan l\u00e4gga till anpassade knappar till verktygsf\u00e4ltet i WordPress Gutenberg ganska enkelt, men visste du att du ocks\u00e5 kan l\u00e4gga till formattypkontroller till formatmenyn?I den h\u00e4r guiden kommer vi&#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":[848,901,755,922,724],"tags":[1173],"class_list":["post-228303","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-koda","category-oeppen-kaella","category-oevrig","category-utvecklaren","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228303","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=228303"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228303\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/221122"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=228303"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=228303"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=228303"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}