{"id":228808,"date":"2022-10-20T19:52:00","date_gmt":"2022-10-20T16:52:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228808"},"modified":"2022-11-09T04:21:26","modified_gmt":"2022-11-09T01:21:26","slug":"formatez-votre-contenu-de-publication-avec-registerformattype","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/formatez-votre-contenu-de-publication-avec-registerformattype\/","title":{"rendered":"Formatez votre contenu de publication avec registerFormatType"},"content":{"rendered":"\n<p>Vous pouvez ajouter des boutons personnalis\u00e9s \u00e0 la barre d&rsquo;outils de WordPress Gutenberg assez facilement, mais saviez-vous que vous pouvez \u00e9galement ajouter des contr\u00f4les de type de format au menu de format ?<\/p>\n<p>Dans ce guide, nous allons voir comment ajouter un contr\u00f4le de format \u00e0 l&rsquo;aide <code>registerFormatType<\/code>qui nous permettra de choisir la couleur de surbrillance du texte s\u00e9lectionn\u00e9 \u00e0 l&rsquo;aide de la <code>&lt;mark&gt;<\/code>balise HTML s\u00e9mantique.<\/p>\n<p>Tout le code utilis\u00e9 dans ce tutoriel se trouve dans le plugin <strong>gratuit<\/strong> <a href=\"https:\/\/wholesomecode.ltd\/plugins\/highlighter\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">&lsquo;Highlighter&rsquo;<\/a>.<\/p>\n<p>Il convient de noter que non seulement vous pouvez appliquer des formats au texte s\u00e9lectionn\u00e9 dans vos blocs, mais vous pouvez \u00e9galement les utiliser pour ins\u00e9rer d&rsquo;autres objets directement dans des blocs, tels que des images et des ic\u00f4nes en ligne.<\/p>\n<p>Application d&rsquo;un type de format \u00e0 l&rsquo;aide du plugin Highlighter.<\/p>\n<p>La vid\u00e9o ci-dessus montre le plugin Highlighter et notre type de format en action. Allons-y.<\/p>\n<h2>Conditions pr\u00e9alables<\/h2>\n<ul>\n<li>Lisez le guide <a href=\"https:\/\/wholesomecode.ltd\/guides\/creating-plugin-wordpress-gutenberg\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Cr\u00e9ation d&rsquo;un plugin pour l&rsquo;\u00e9diteur de blocs WordPress (Gutenberg)<\/a> afin de prendre une longueur d&rsquo;avance dans la cr\u00e9ation du plugin.<\/li>\n<li>T\u00e9l\u00e9chargez \u00e9ventuellement <a href=\"https:\/\/wholesomecode.ltd\/plugins\/highlighter\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">le plugin gratuit &lsquo;Highlighter&rsquo;<\/a> et regardez le fichier<code>\/src\/formats\/highlight.js<\/code><\/li>\n<\/ul>\n<h2>Configurer les fichiers du plugin<\/h2>\n<p>Si vous avez suivi les conditions pr\u00e9alables et suivi le guide du plugin, nous devons continuer et supprimer un tas de ces fichiers.<\/p>\n<ul>\n<li>Dans le dossier src, supprimez tout sauf les fichiers <code>index.js<\/code>et .<code>style.scss<\/code><\/li>\n<li>Supprimez compl\u00e8tement le contenu de <code>index.js<\/code>et <code>style.scss<\/code>.<\/li>\n<li>Dans le <code>\/build<\/code>dossier, supprimez tous les fichiers. Nous les r\u00e9g\u00e9n\u00e9rerons plus tard.<\/li>\n<li>Supprimer <code>block.json<\/code>. Nous ne construisons pas un bloc aujourd&rsquo;hui, nous n&rsquo;en avons donc pas besoin.<\/li>\n<\/ul>\n<h3>Mettre les scripts en file d&rsquo;attente<\/h3>\n<p>Dans le fichier principal du plugin (<code>wholesome-plugin.php<\/code>si vous avez suivi mot pour mot le didacticiel pr\u00e9c\u00e9dent), ajoutez le code suivant pour mettre en file d&rsquo;attente le JavaScript et le CSS de votre 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>Enregistrer le type de format<\/li>\n<\/ol>\n<hr \/>\n<p>Ouvrez votre <code>\/src\/index.js<\/code>fichier et ajoutez le code suivant.<\/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>Cela cr\u00e9e notre bouton de surligneur qui appara\u00eetra dans le menu de format. Maintenant, nous allons utiliser <code>registerFormatType<\/code>pour enregistrer le format.<\/p>\n<p>Tout d&rsquo;abord, nous devons modifier nos importations pour importer \u00e9galement <code>registerFormatType<\/code>depuis <code>@wordpress\/rich-text<\/code>.<\/p>\n<pre><code>import { registerFormatType, toggleFormat } from '@wordpress\/rich-text';\n<\/code><\/pre>\n<p>Enregistrez ensuite le format en ajoutant le nom du format (<code>wholesome\/highlighter<\/code>) et en transmettant un objet avec les propri\u00e9t\u00e9s suivantes. <code>toggleFormat<\/code>sera utilis\u00e9 plus tard pour notre \u00e9v\u00e9nement click.<\/p>\n<ul>\n<li><code>className<\/code>: Le nom de classe qui sera ajout\u00e9 \u00e0 la balise qui entoure le texte en surbrillance.<\/li>\n<li><code>edit<\/code>: Le bouton que nous avons pr\u00e9c\u00e9demment enregistr\u00e9.<\/li>\n<li><code>tagName<\/code>: Le type de balise qui sera appliqu\u00e9 au texte en surbrillance. Dans ce cas, nous utilisons <code>&lt;mark&gt;<\/code>un balisage s\u00e9mantiquement correct pour une surbrillance de texte.<\/li>\n<li><code>title<\/code>: Le titre du format.<\/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>G\u00e9rer le clic<\/h3>\n<p>Maintenant que nous avons ajout\u00e9 le bouton au menu de format, il ne nous reste plus qu&rsquo;\u00e0 g\u00e9rer l&rsquo;\u00e9v\u00e9nement click.<\/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=\"Formatez votre contenu de publication avec registerFormatType\" ><\/a><\/p>\n<p>Modifiez <code>RichTextToolbarButton<\/code>et ajoutez l&rsquo; <code>onClick<\/code>\u00e9v\u00e9nement.<\/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>Sur le d\u00e9clencheur, nous appelons le <code>toggleFormat<\/code>passage de la valeur (qui est le texte en surbrillance) et passons un objet avec la <code>type<\/code>propri\u00e9t\u00e9 d\u00e9finie sur le nom de notre format.<\/p>\n<p>Maintenant, lorsque le bouton est cliqu\u00e9 initialement, il appliquera la <code>&lt;mark&gt;<\/code>balise HTML au texte s\u00e9lectionn\u00e9, et lorsqu&rsquo;il sera cliqu\u00e9 \u00e0 nouveau, il basculera le format en le supprimant \u00e0 nouveau.<\/p>\n<p>Pour afficher le code dans son int\u00e9gralit\u00e9 et pour afficher les derni\u00e8res mises \u00e0 jour <a href=\"https:\/\/github.com\/wholesomecode\/wholesome-highlighter\/blob\/master\/src\/formats\/highlight.js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">, consultez le fichier complet <code>\/src\/formats\/highlight.js<\/code>dans le plugin Highlighter<\/a>.<\/p>\n<p>Le code ci-dessus enregistrera le bloc pour tous les types de blocs. Cependant, si vous souhaitez que le bloc n&rsquo;apparaisse que sur certains types de blocs, vous pouvez \u00e9galement le faire.<\/p>\n<p>Pour ce faire, nous devrons utiliser le composant d&rsquo;ordre sup\u00e9rieur ifCondition et utiliser Select pour d\u00e9terminer le type de bloc que nous avons s\u00e9lectionn\u00e9.<\/p>\n<p>Pour ce faire, ajoutez les importations suivantes en haut de votre fichier.<\/p>\n<pre><code>import { ifCondition  } from '@wordpress\/compose';\nimport { useSelect } from '@wordpress\/data';\n<\/code><\/pre>\n<p>Au-dessus du <code>registerFormatType<\/code>bloc de code, ajoutez le bloc de code de composition suivant.<\/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>Comme vous pouvez le voir par le code, si le bloc s\u00e9lectionn\u00e9 est <code>core\/paragraph<\/code>le composant d&rsquo;ordre sup\u00e9rieur <code>ifCondition<\/code>renverra true, et permettra donc au bouton de s&rsquo;afficher.<\/p>\n<p>Tout ce que nous devons faire maintenant est de passer le conteneur que nous venons de cr\u00e9er dans le <code>registerBlockType<\/code>bloc de code et notre code est termin\u00e9.<\/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>Pour afficher le code dans son int\u00e9gralit\u00e9 <a href=\"https:\/\/github.com\/wholesomecode\/wholesome-highlighter\/blob\/master\/src\/formats\/highlight-paragraph.js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">, consultez le <code>\/src\/formats\/highlight-paragraph.js<\/code>fichier dans le plugin Highlighter<\/a>.<\/p>\n<ul>\n<li>Allez plus loin en <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\">ajoutant des attributs personnalis\u00e9s \u00e0 votre format personnalis\u00e9 avec un popover modal<\/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\">Ajouter une barre lat\u00e9rale de bloc avec InspectorControls<\/a><\/li>\n<li>Envisagez de cr\u00e9er une <a href=\"https:\/\/wholesomecode.ltd\/guides\/create-settings-page-wordpress-gutenberg-components\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">page d&rsquo;options et de param\u00e8tres \u00e0 l&rsquo;aide de composants Gutenberg<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/wholesomecode.ltd\" class=\"external external_icon\">wholesomecode.ltd<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vous pouvez ajouter des boutons personnalis\u00e9s \u00e0 la barre d&rsquo;outils de WordPress Gutenberg assez facilement, mais saviez-vous que vous pouvez \u00e9galement ajouter des contr\u00f4les de type de format au menu de format ? Dans ce guide, nous allons&#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":[915,893,717,748,841],"tags":[1167],"class_list":["post-228808","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autre","category-code-2","category-developpeur","category-open-source-projektmanagement-2","category-tutoriels","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/228808","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=228808"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/228808\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/221122"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=228808"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=228808"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=228808"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}