{"id":228370,"date":"2022-10-20T19:35:00","date_gmt":"2022-10-20T16:35:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228370"},"modified":"2022-11-09T02:06:23","modified_gmt":"2022-11-08T23:06:23","slug":"sformatuj-tresc-posta-za-pomoca-registerformattype","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/sformatuj-tresc-posta-za-pomoca-registerformattype\/","title":{"rendered":"Sformatuj tre\u015b\u0107 posta za pomoc\u0105 registerFormatType"},"content":{"rendered":"\n<p>Mo\u017cesz do\u015b\u0107 \u0142atwo doda\u0107 niestandardowe przyciski do paska narz\u0119dzi w WordPress Gutenberg, ale czy wiesz, \u017ce mo\u017cesz r\u00f3wnie\u017c doda\u0107 kontrolki typu formatu do menu formatu?<\/p>\n<p>W tym przewodniku przyjrzymy si\u0119, jak doda\u0107 kontrolk\u0119 formatu <code>registerFormatType<\/code>, kt\u00f3ra pozwoli nam wybra\u0107 kolor pod\u015bwietlenia zaznaczonego tekstu za pomoc\u0105 semantycznego <code>&lt;mark&gt;<\/code>znacznika HTML.<\/p>\n<p>Ca\u0142y kod u\u017cyty w tym samouczku mo\u017cna znale\u017a\u0107 w <strong>bezp\u0142atnej<\/strong> <a href=\"https:\/\/wholesomecode.ltd\/plugins\/highlighter\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wtyczce \u201eHighlighter&quot;<\/a>.<\/p>\n<p>Warto zauwa\u017cy\u0107, \u017ce nie tylko mo\u017cesz zastosowa\u0107 formatowanie do zaznaczonego tekstu w swoich blokach, ale mo\u017cesz r\u00f3wnie\u017c u\u017cy\u0107 ich do wstawienia innych obiekt\u00f3w bezpo\u015brednio do blok\u00f3w, takich jak obrazy i ikony w tek\u015bcie.<\/p>\n<p>Stosowanie typu formatu za pomoc\u0105 wtyczki Highlighter.<\/p>\n<p>Powy\u017cszy film pokazuje wtyczk\u0119 Highlighter i nasz typ formatu w akcji. Przejd\u017amy do tego.<\/p>\n<h2>Warunki wst\u0119pne<\/h2>\n<ul>\n<li>Przeczytaj przewodnik <a href=\"https:\/\/wholesomecode.ltd\/guides\/creating-plugin-wordpress-gutenberg\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Tworzenie wtyczki do edytora blok\u00f3w WordPress (Gutenberg)<\/a>, aby rozpocz\u0105\u0107 tworzenie wtyczki.<\/li>\n<li>Opcjonalnie <a href=\"https:\/\/wholesomecode.ltd\/plugins\/highlighter\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pobierz darmow\u0105 wtyczk\u0119 \u201eHighlighter&#8221;<\/a> i sp\u00f3jrz na plik<code>\/src\/formats\/highlight.js<\/code><\/li>\n<\/ul>\n<h2>Skonfiguruj pliki wtyczek<\/h2>\n<p>Je\u015bli spe\u0142ni\u0142e\u015b wymagania wst\u0119pne i post\u0119pujesz zgodnie z przewodnikiem dotycz\u0105cym wtyczek, musimy i\u015b\u0107 dalej i usun\u0105\u0107 kilka tych plik\u00f3w.<\/p>\n<ul>\n<li>W folderze src usu\u0144 wszystko poza plikami <code>index.js<\/code>i .<code>style.scss<\/code><\/li>\n<li>Usu\u0144 zawarto\u015b\u0107 <code>index.js<\/code>i <code>style.scss<\/code>ca\u0142kowicie.<\/li>\n<li>W <code>\/build<\/code>folderze usu\u0144 wszystkie pliki. Zregenerujemy je p\u00f3\u017aniej.<\/li>\n<li>Usu\u0144 <code>block.json<\/code>. Nie budujemy dzisiaj bloku, wi\u0119c nie potrzebujemy tego.<\/li>\n<\/ul>\n<h3>Kolejkuj skrypty<\/h3>\n<p>W g\u0142\u00f3wnym pliku wtyczki (<code>wholesome-plugin.php<\/code>je\u015bli post\u0119powa\u0142e\u015b dok\u0142adnie zgodnie z poprzednim samouczkiem) dodaj nast\u0119puj\u0105cy kod, aby umie\u015bci\u0107 w kolejce JavaScript i CSS dla swojej wtyczki.<\/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>Zarejestruj typ formatu<\/li>\n<\/ol>\n<hr \/>\n<p>Otw\u00f3rz <code>\/src\/index.js<\/code>plik i dodaj nast\u0119puj\u0105cy 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>Tworzy to nasz przycisk wyr\u00f3\u017cnienia, kt\u00f3ry pojawi si\u0119 w menu formatu. Teraz u\u017cyjemy <code>registerFormatType<\/code>do zarejestrowania formatu.<\/p>\n<p>Najpierw musimy edytowa\u0107 nasze importy, aby r\u00f3wnie\u017c importowa\u0107 <code>registerFormatType<\/code>z <code>@wordpress\/rich-text<\/code>.<\/p>\n<pre><code>import { registerFormatType, toggleFormat } from '@wordpress\/rich-text';\n<\/code><\/pre>\n<p>Nast\u0119pnie zarejestruj format, dodaj\u0105c nazw\u0119 formatu (<code>wholesome\/highlighter<\/code>) i przekazuj\u0105c obiekt o nast\u0119puj\u0105cych w\u0142a\u015bciwo\u015bciach. <code>toggleFormat<\/code>zostanie wykorzystany p\u00f3\u017aniej w naszym wydarzeniu dotycz\u0105cym klikni\u0119\u0107.<\/p>\n<ul>\n<li><code>className<\/code>: nazwa klasy, kt\u00f3ra zostanie dodana do tagu otaczaj\u0105cego pod\u015bwietlony tekst.<\/li>\n<li><code>edit<\/code>: Przycisk, kt\u00f3ry wcze\u015bniej zarejestrowali\u015bmy.<\/li>\n<li><code>tagName<\/code>: typ tagu, kt\u00f3ry zostanie zastosowany do pod\u015bwietlonego tekstu. W tym przypadku u\u017cywamy <code>&lt;mark&gt;<\/code>kt\u00f3ry jest semantycznie poprawnym znacznikiem dla pod\u015bwietlenia tekstu.<\/li>\n<li><code>title<\/code>: Tytu\u0142 formatu.<\/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>Obs\u0142uguj klikni\u0119cie<\/h3>\n<p>Teraz, gdy dodali\u015bmy przycisk do menu formatu, wszystko, co musimy zrobi\u0107, to obs\u0142u\u017cy\u0107 zdarzenie klikni\u0119cia.<\/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=\"Sformatuj tre\u015b\u0107 posta za pomoc\u0105 registerFormatType\" ><\/a><\/p>\n<p>Edytuj <code>RichTextToolbarButton<\/code>i dodaj <code>onClick<\/code>wydarzenie.<\/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>Na wyzwalaczu wywo\u0142ujemy <code>toggleFormat<\/code>przekazywanie warto\u015bci (kt\u00f3ra jest pod\u015bwietlonym tekstem) i przekazujemy obiekt z <code>type<\/code>w\u0142a\u015bciwo\u015bci\u0105 ustawion\u0105 na nazw\u0119 naszego formatu.<\/p>\n<p>Teraz, gdy przycisk zostanie klikni\u0119ty pocz\u0105tkowo, zastosuje <code>&lt;mark&gt;<\/code>tag HTML do zaznaczonego tekstu, a po ponownym klikni\u0119ciu prze\u0142\u0105czy format, usuwaj\u0105c go ponownie.<\/p>\n<p>Aby wy\u015bwietli\u0107 kod w ca\u0142o\u015bci i zobaczy\u0107 najnowsze aktualizacje <a href=\"https:\/\/github.com\/wholesomecode\/wholesome-highlighter\/blob\/master\/src\/formats\/highlight.js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">, sp\u00f3jrz na pe\u0142ny <code>\/src\/formats\/highlight.js<\/code>plik we wtyczce Highlighter<\/a>.<\/p>\n<p>Powy\u017cszy kod zarejestruje blok dla wszystkich typ\u00f3w blok\u00f3w. Je\u015bli jednak chcesz, aby blok pojawia\u0142 si\u0119 tylko w niekt\u00f3rych typach blok\u00f3w, mo\u017cesz to zrobi\u0107.<\/p>\n<p>Aby to zrobi\u0107, b\u0119dziemy musieli u\u017cy\u0107 komponentu wy\u017cszego rz\u0119du ifCondition i useSelect do okre\u015blenia typu bloku, kt\u00f3ry wybrali\u015bmy.<\/p>\n<p>Aby to zrobi\u0107, dodaj nast\u0119puj\u0105ce importy na pocz\u0105tku pliku.<\/p>\n<pre><code>import { ifCondition  } from '@wordpress\/compose';\nimport { useSelect } from '@wordpress\/data';\n<\/code><\/pre>\n<p>Nad <code>registerFormatType<\/code>blokiem kodu dodaj nast\u0119puj\u0105cy blok tworzenia kodu.<\/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>Jak wida\u0107 po kodzie, je\u015bli wybrany blok jest <code>core\/paragraph<\/code>sk\u0142adnikiem wy\u017cszego rz\u0119du <code>ifCondition<\/code>, zwr\u00f3ci warto\u015b\u0107 true, a zatem pozwoli na renderowanie przycisku.<\/p>\n<p>Wszystko, co musimy teraz zrobi\u0107, to przekaza\u0107 w\u0142a\u015bnie utworzony kontener do <code>registerBlockType<\/code>bloku kodu i nasz kod jest gotowy.<\/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>Aby zobaczy\u0107 kod w ca\u0142o\u015bci <a href=\"https:\/\/github.com\/wholesomecode\/wholesome-highlighter\/blob\/master\/src\/formats\/highlight-paragraph.js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">, sp\u00f3jrz na <code>\/src\/formats\/highlight-paragraph.js<\/code>plik we wtyczce Highlighter<\/a>.<\/p>\n<ul>\n<li>Id\u017a dalej, <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\">dodaj\u0105c niestandardowe atrybuty do niestandardowego formatu za pomoc\u0105 modalnego popovera<\/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\">Dodaj blokowy pasek boczny za pomoc\u0105 InspectorControls<\/a><\/li>\n<li>Sp\u00f3jrz na tworzenie strony <a href=\"https:\/\/wholesomecode.ltd\/guides\/create-settings-page-wordpress-gutenberg-components\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">opcji i ustawie\u0144 za pomoc\u0105 komponent\u00f3w Gutenberg<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/wholesomecode.ltd\" class=\"external external_icon\">wholesomecode.ltd<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mo\u017cesz do\u015b\u0107 \u0142atwo doda\u0107 niestandardowe przyciski do paska narz\u0119dzi w WordPress Gutenberg, ale czy wiesz, \u017ce mo\u017cesz r\u00f3wnie\u017c doda\u0107 kontrolki typu formatu do menu formatu?W tym przewodniku zamierzamy &#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":[721,919,897,752,845],"tags":[1169],"class_list":["post-228370","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-inny","category-kod","category-otwarte-zrodlo","category-samouczki","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228370","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=228370"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228370\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/221122"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=228370"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=228370"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=228370"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}