{"id":234275,"date":"2023-02-26T12:16:00","date_gmt":"2023-02-26T09:16:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234275"},"modified":"2023-02-26T12:20:41","modified_gmt":"2023-02-26T09:20:41","slug":"comment-ajouter-des-parametres-de-couleur-a-votre-bloc-gutenberg-personnalise","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/comment-ajouter-des-parametres-de-couleur-a-votre-bloc-gutenberg-personnalise\/","title":{"rendered":"Comment ajouter des param\u00e8tres de couleur \u00e0 votre bloc Gutenberg personnalis\u00e9"},"content":{"rendered":"\n<p>Cet article expliquera en profondeur comment ajouter des param\u00e8tres de couleur \u00e0 votre bloc WordPress Gutenberg personnalis\u00e9. Nous apprendrons comment ajouter le m\u00eame composant de param\u00e8tres de couleur, qui permet de choisir parmi les couleurs de la palette et la couleur personnalis\u00e9e, comme de nombreux blocs par d\u00e9faut de WordPress l&rsquo;utilisent.<\/p>\n<p>Voici ce que nous allons ajouter \u00e0 notre bloc personnalis\u00e9\u00a0:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151572-61e4cc69ead10.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-151572-61e4cc69ead10.png\" alt=\"Comment ajouter des param\u00e8tres de couleur \u00e0 votre bloc Gutenberg personnalis\u00e9\"><\/a><\/p>\n<p>En utilisant les composants de Gutenberg, nous pouvons tr\u00e8s facilement impl\u00e9menter cette palette\/section de couleurs dans notre propre bloc personnalis\u00e9. Vous pouvez d\u00e9finir les param\u00e8tres de couleur pour affecter la couleur de votre choix\u00a0; arri\u00e8re-plan, couleur de texte, couleur de bordure ou quoi que ce soit d&rsquo;autre. Vous pouvez \u00e9galement ajouter autant de param\u00e8tres de couleur que vous le souhaitez dans ce panneau.<\/p>\n<p>Avant de plonger dans le code, il y a certaines choses dont vous devez \u00eatre conscient. Ne passez pas directement au code car la section suivante expliquera en grande partie pourquoi le code doit le faire comme il le fait.<\/p>\n<h2>Ce que vous devez savoir en premier<\/h2>\n<p>Les composants pour impl\u00e9menter les param\u00e8tres de palette\/couleur sont <code>PanelColorSettings<\/code>et <code>withColors<\/code>du <code>wp.blockEditor<\/code>package. Le composant <code>withColors<\/code>est un soi-disant composant d&rsquo;ordre sup\u00e9rieur et doit \u00eatre impl\u00e9ment\u00e9 un peu diff\u00e9remment de la simple sortie d&rsquo;un composant normal. J&rsquo;entrerai dans un peu plus de d\u00e9tails plus tard. Mais nous devons d&rsquo;abord conna\u00eetre les bases de la fa\u00e7on dont Gutenberg g\u00e8re les param\u00e8tres de couleur de bloc.<\/p>\n<h3>Comment les blocs Gutenberg g\u00e8rent les param\u00e8tres de couleur<\/h3>\n<p>Il existe certaines r\u00e8gles sur la fa\u00e7on dont Gutenberg g\u00e8re les param\u00e8tres de couleur dans les blocs. Si vous avez d\u00e9j\u00e0 cr\u00e9\u00e9 un th\u00e8me pris en charge par Gutenberg, vous connaissez probablement d\u00e9j\u00e0 ces r\u00e8gles. Nous allons n\u00e9anmoins les parcourir rapidement car nous devons g\u00e9rer cela dans notre code de bloc.<\/p>\n<ul>\n<li>Lorsqu&rsquo;une couleur de palette est choisie, l&rsquo;\u00e9l\u00e9ment de bloc de n\u0153ud obtiendra une classe d&rsquo;un certain motif. La classe commence par &quot; <code>has-<\/code>&quot;, puis le slug de la palette vient apr\u00e8s. La fin d\u00e9pend de l&rsquo;\u00e9l\u00e9ment que la couleur doit affecter. Pour la couleur du texte, il se termine par &quot; <code>-color<\/code>&quot;. Pour la couleur d&rsquo;arri\u00e8re-plan, il se termine par &quot; <code>-background-color<\/code>&quot;. Par exemple, un bloc avec une palette de couleur &quot;rouge&quot; choisie comme couleur d&rsquo;arri\u00e8re-plan obtiendra la classe &quot; <code>has-red-background-color<\/code>&quot;.<\/li>\n<li>Lorsqu&rsquo;une couleur personnalis\u00e9e est choisie (\u00e0 partir du s\u00e9lecteur de couleurs), l&rsquo;\u00e9l\u00e9ment de bloc de n\u0153ud obtiendra un style en ligne avec le code hexad\u00e9cimal. Par exemple, une couleur personnalis\u00e9e #DD0000 choisie pour la couleur de fond recevra l&rsquo;attribut &quot; <code>style=\"background-color: #DD0000;<\/code>&quot;.<\/li>\n<\/ul>\n<p>Lorsque nous impl\u00e9menterons les param\u00e8tres de couleur pour notre bloc, nous devrons impl\u00e9menter la classe et le style en ligne corrects. Nous le ferons \u00e0 la fin de ce tutoriel.<\/p>\n<h3>Comment travailler avec<code>withColors<\/code><\/h3>\n<p>Comme mentionn\u00e9 pr\u00e9c\u00e9demment, il <code>withColors<\/code>s&rsquo;agit d&rsquo;un <a href=\"https:\/\/reactjs.org\/docs\/higher-order-components.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">composant d&rsquo;ordre sup\u00e9rieur<\/a>. Cela signifie essentiellement que c&rsquo;est un composant qui prend un composant et renvoie un nouveau composant. Dans le composant renvoy\u00e9, nous obtenons des accessoires utiles du composant d&rsquo;ordre sup\u00e9rieur. Pour faire simple, nous utiliserons <code>withColors<\/code>pour retourner notre propre composant pour notre bloc personnalis\u00e9. Notre composant de bloc obtient les accessoires n\u00e9cessaires pour travailler avec les couleurs de <code>withColors<\/code>.<\/p>\n<p>Le composant <code>withColors<\/code>g\u00e8re l&rsquo;\u00e9tat et de nombreuses fonctionnalit\u00e9s pour travailler avec les couleurs. Et nous obtenons beaucoup d&rsquo;automatisation dans ce processus. C&rsquo;est tr\u00e8s pratique pour d\u00e9terminer si la couleur choisie est une couleur de palette (nous devons ajouter une classe) ou une couleur personnalis\u00e9e (nous devons ajouter un style en ligne). <code>withColors<\/code>simplifier une grande partie du processus de stockage de la couleur choisie, quelle qu&rsquo;elle soit, dans les attributs de notre bloc. En parlant d&rsquo;attributs..<\/p>\n<h3>Attributs et<code>withColors<\/code><\/h3>\n<p>\u00c9videmment, votre bloc a besoin d&rsquo;attributs pour stocker la couleur choisie. Afin de b\u00e9n\u00e9ficier de l&rsquo;automatisation de withColor pour stocker la couleur correcte, vous devez en fait d\u00e9finir deux attributs pour chaque param\u00e8tre de couleur. Un pour stocker le slug de la palette de couleurs et un autre pour stocker le code hexad\u00e9cimal. Il y a quand m\u00eame quelques r\u00e8gles.<\/p>\n<p>Supposons que vous souhaitiez ajouter un param\u00e8tre de couleur pour la couleur du texte du bloc &#8211; vous d\u00e9cidez donc de d\u00e9finir un attribut bien nomm\u00e9 &quot; <code>textColor<\/code>&quot;. Vous devrez alors d\u00e9finir un autre attribut dans le pattern \u00ab<code>customYourOriginalAttribute<\/code>\u00bb. Dans cet exemple, le deuxi\u00e8me attribut devra \u00eatre nomm\u00e9 &quot; <code>customTextColor<\/code>&quot;. Attention au camelCase (majuscule) ici. Suivre ce mod\u00e8le <code>withColors<\/code>entra\u00eenera automatiquement\u00a0:<\/p>\n<ul>\n<li>Si une couleur de palette a \u00e9t\u00e9 choisie, l&rsquo;attribut \u00ab<code>textColor<\/code>\u00bb contiendra le slug de la palette.<\/li>\n<li>Si une couleur personnalis\u00e9e a \u00e9t\u00e9 choisie, &quot; <code>customTextColor<\/code>&quot; sera rempli avec le code hexad\u00e9cimal.<\/li>\n<\/ul>\n<p>Ces deux-l\u00e0 travaillent en tandem. Si une couleur personnalis\u00e9e est choisie, <code>textColor<\/code>sera automatiquement <code>undefined<\/code>, et vice versa.<\/p>\n<p>Et enfin, une derni\u00e8re chose \u00e0 retenir: <strong>vous n&rsquo;aurez pas besoin d&rsquo;utiliser <code>setAttributes()<\/code>pour mettre \u00e0 jour vos attributs de couleur<\/strong>! Les accessoires fournis par <code>withColors<\/code>incluent une fonction qui met automatiquement \u00e0 jour vos attributs pour vous. Tout ce que vous avez \u00e0 faire est de passer cette fonction \u00e0 l&rsquo; <code>onChange<\/code>\u00e9v\u00e9nement au <code>PanelColorSettings<\/code>composant, et vos attributs seront automatiquement mis \u00e0 jour.<\/p>\n<p>Ok, il est temps de voir tout cela en pratique !<\/p>\n<h2>Impl\u00e9mentation des param\u00e8tres de couleur dans un bloc personnalis\u00e9<\/h2>\n<p>Pour commencer, j&rsquo;ai un bloc personnalis\u00e9 assez inutile qui ne fait rien d&rsquo;autre que d&rsquo;afficher un texte cod\u00e9 en dur. Cela facilite simplement la s\u00e9paration de ce que nous devons coder pour ajouter des param\u00e8tres de couleur. J&rsquo;ai une <a href=\"https:\/\/wordpress.mediadoma.com\/fr\/comment-creer-un-bloc-wordpress-gutenberg-personnalise-serie-de-didacticiels\/\" title=\"s\u00e9rie de tutoriels sur la fa\u00e7on de cr\u00e9er vos propres blocs personnalis\u00e9s\">s\u00e9rie de tutoriels sur la fa\u00e7on de cr\u00e9er vos propres blocs personnalis\u00e9s<\/a> si vous souhaitez en savoir plus.<\/p>\n<p>Remarque\u00a0: J&rsquo;\u00e9cris tout le code dans ES6\/ESNext. Cela inclut les fonctions fl\u00e9ch\u00e9es qui n\u00e9cessitent une attention particuli\u00e8re dans votre configuration Babel\/webpack. Si vous obtenez des erreurs sur certains des codes ci-dessous, suivez mon <a href=\"https:\/\/wordpress.mediadoma.com\/fr\/guide-complet-sur-la-configuration-dun-environnement-de-developpement-pour-gutenberg\/\" title=\"guide sur la fa\u00e7on de configurer Webpack et Babel pour ES6\/ESNext\">guide sur la fa\u00e7on de configurer Webpack et Babel pour ES6\/ESNext<\/a> ou ajustez le code pour ne pas utiliser de &quot;syntaxes exp\u00e9rimentales&quot;.<\/p>\n<p>Ceci est mon bloc personnalis\u00e9 de base avant de faire quoi que ce soit avec les param\u00e8tres de couleur\u00a0:<\/p>\n<pre><code>const { registerBlockType } = wp.blocks;\nconst { __ } = wp.i18n;\n\u00a0\nconst BlockWithColorSettings = (props) =&gt; {\n    return(\n        &lt;div&gt;\n            PanelColorSettings Demo\n        &lt;\/div&gt;\n    );\n}\n\u00a0\nregisterBlockType('awp\/colorsettings', {\n    title: __('Color Settings Demo'),\n    icon: 'carrot',\n    category: 'common',\n    edit: BlockWithColorSettings,\n    save: (props) =&gt; { \n        return(\n            &lt;div&gt;\n                PanelColorSettings Demo\n            &lt;\/div&gt;\n        );\n    }\n});<\/code><\/pre>\n<p>C&rsquo;est assez basique. Notez que la <code>edit<\/code>fonction fait simplement r\u00e9f\u00e9rence \u00e0 un composant s\u00e9par\u00e9, <code>BlockWithColorSettings<\/code>, au lieu de l&rsquo;\u00e9crire en ligne. Cela facilite la mise en \u0153uvre <code>withColors<\/code>ult\u00e9rieure.<\/p>\n<p>D&rsquo;accord, il est temps d&rsquo;impl\u00e9menter les param\u00e8tres de couleur dans notre bloc\u00a0! Par exemple, je veux configurer la couleur du texte.<\/p>\n<h3>Ajout d&rsquo;attributs<\/h3>\n<p>Comme mentionn\u00e9 pr\u00e9c\u00e9demment, nous devons d\u00e9finir deux attributs pour chaque param\u00e8tre de couleur. Et nous devons faire tr\u00e8s attention \u00e0 leur d\u00e9nomination. Je souhaite ajouter un attribut de couleur de texte, je nomme donc l&rsquo;attribut <code>textColor<\/code>. Ce qui signifie que je vais \u00e9galement ajouter un attribut <code>customTextColor<\/code>. Les deux doivent \u00eatre de type cha\u00eene.<\/p>\n<pre><code>...\nregisterBlockType('awp\/colorsettings', {\n    title: __('Color Settings Demo'),\n    icon: 'carrot',\n    category: 'common',\n    attributes: {\n        textColor: {\n            type: 'string'\n        },\n        customTextColor: {\n            type: 'string'\n        },\n    },\n    edit: BlockWithColorSettings,\n    save: (props) =&gt; { \n    ...<\/code><\/pre>\n<p>Nos attributs sont pr\u00eats \u00e0 stocker le param\u00e8tre de couleur du texte du bloc. Il est maintenant temps de mettre en \u0153uvre <code>withColors<\/code>et <code>PanelColorSettings<\/code>.<\/p>\n<h3>Ex\u00e9cution<code>withColors<\/code><\/h3>\n<p>Comme mentionn\u00e9 pr\u00e9c\u00e9demment <code>withColors<\/code>, il s&rsquo;agit d&rsquo;un composant d&rsquo;ordre sup\u00e9rieur qui devrait prendre un composant \u00e0 retourner. Nous voulons \u00e9videmment qu&rsquo;il renvoie notre composant d&rsquo;\u00e9dition, <code>BlockWithColorSettings<\/code>. Mais comme param\u00e8tre, <code>withColors<\/code>nous fournissons un objet.<\/p>\n<p>Dans l&rsquo;objet pass\u00e9 \u00e0, <code>withColors<\/code>nous devons indiquer <code>withColors<\/code>quel attribut nous voulons utiliser pour stocker la couleur et quel type d&rsquo;\u00e9l\u00e9ment il colorera (dans notre cas, la couleur du texte, qui signifie la r\u00e8gle CSS &quot;couleur&quot;). L&rsquo;information sur la r\u00e8gle CSS permet de s&rsquo;assurer que les noms de classe renvoy\u00e9s sont corrects. Comme il s&rsquo;agit de la couleur du texte, nous voulons des noms de classe tels que &quot;a\u2013couleur&quot;.<\/p>\n<p>D&rsquo;abord quelques d\u00e9structurations en haut. <code>withColors<\/code>r\u00e9side dans le <code>wp.blockEditor<\/code>package.<\/p>\n<pre><code>const { withColors } = wp.blockEditor;<\/code><\/pre>\n<p>Nous allons changer la <code>edit<\/code>fonction en\u00a0:<\/p>\n<pre><code>    ...\n    attributes: {\n        ...\n    },\n    edit: withColors({textColor: 'color'})(BlockWithColorSettings),\n    save: (props) =&gt; { \n        ...<\/code><\/pre>\n<p>Avec ce code, notre composant <code>BlockWithColorSettings<\/code>recevra quelques accessoires suppl\u00e9mentaires\u00a0:<\/p>\n<ul>\n<li><code>props.textColor<\/code>: Est un objet qui se compose de toutes les informations sur la couleur choisie. Si une couleur de palette a \u00e9t\u00e9 choisie, elle stockera les propri\u00e9t\u00e9s du code hexad\u00e9cimal, du slug de palette, du nom de la classe, etc. Si une couleur personnalis\u00e9e a \u00e9t\u00e9 choisie, l&rsquo;objet contiendra le code hexad\u00e9cimal. Le code hexad\u00e9cimal se trouve toujours dans la propri\u00e9t\u00e9 <code>color<\/code>. Et le nom de la classe (uniquement si une couleur de palette a \u00e9t\u00e9 choisie) sera d\u00e9fini dans la propri\u00e9t\u00e9 <code>class<\/code>.<\/li>\n<li><code>props.setTextColor<\/code>: Une fonction qui mettra \u00e0 jour nos attributs pour nous. Nous le fournissons pour l&rsquo;\u00e9v\u00e9nement des param\u00e8tres de couleur <code>onChange<\/code>comme nous le verrons plus tard. La fonction mettra \u00e0 jour les attributs <code>textColor<\/code>et. <code>customTextColor<\/code>Parce que nous avons suivi les r\u00e8gles de d\u00e9nomination, il sera automatiquement mis \u00e0 jour <code>customTextColor<\/code>m\u00eame si nous n&rsquo;avons jamais fourni ce nom d&rsquo;attribut.<\/li>\n<\/ul>\n<p>Notez que la fonction &quot;set&quot; fournie comme accessoire suivra la r\u00e8gle\u00a0: &quot; <code>setYourAttributeName<\/code>&quot;. Parce que nous avons fourni <code>textColor<\/code>, la fonction est nomm\u00e9e <code>setTextColor<\/code>. Si nous nommions plut\u00f4t notre attribut <code>awesomeColor<\/code>et le fournissions dans l&rsquo; <code>withColors<\/code>objet, la fonction set serait nomm\u00e9e <code>setAwesomeColor()<\/code>.<\/p>\n<h3>Ex\u00e9cution<code>PanelColorSettings<\/code><\/h3>\n<p>La prochaine \u00e9tape consiste \u00e0 impl\u00e9menter la section Inspecteur proprement dite. Pour ce faire, nous ajoutons <code>PanelColorSettings<\/code>\u00e0 l&rsquo;int\u00e9rieur d&rsquo;un <code>InspectorControls<\/code>composant. Parce que React exige que tout soit \u00e0 l&rsquo;int\u00e9rieur d&rsquo;un n\u0153ud racine, nous utilisons \u00e9galement <code>Fragment<\/code>(from <code>wp.elements<\/code>) pour tout envelopper \u00e0 l&rsquo;int\u00e9rieur.<\/p>\n<p>D&rsquo;abord quelques d\u00e9structurations en haut du fichier :<\/p>\n<pre><code>const { Fragment } = wp.element;\nconst { InspectorControls, PanelColorSettings, withColors } = wp.blockEditor;<\/code><\/pre>\n<p>Et nous mettons \u00e0 jour notre <code>BlockWithColorSettings<\/code>composant en quelque chose comme ceci\u00a0:<\/p>\n<pre><code>const BlockWithColorSettings = (props) =&gt; {\n    const { textColor, setTextColor } = props;  \/\/ Props received from withColors\n    return(\n        &lt;Fragment&gt;\n            &lt;InspectorControls&gt;\n                &lt;PanelColorSettings \n                    title={__('Color settings')}\n                    colorSettings={[\n                        {\n                            value: textColor.color,\n                            onChange: setTextColor,\n                            label: __('Text color')\n                        },\n                    ]}\n                \/&gt;\n            &lt;\/InspectorControls&gt;\n            &lt;div&gt;\n                PanelColorSettings Demo\n            &lt;\/div&gt;\n        &lt;\/Fragment&gt;\n    );\n}<\/code><\/pre>\n<p>Comme vous pouvez le voir en ligne, <code>#2<\/code>nous d\u00e9structurons les accessoires re\u00e7us de <code>withColors<\/code>, <code>textColor<\/code>et <code>setTextColor<\/code>. Gardez \u00e0 l&rsquo;esprit que <code>props.textColor<\/code>c&rsquo;est l&rsquo;objet re\u00e7u de <code>withColors<\/code>, et <code>props.attributes.textColor<\/code>c&rsquo;est l&rsquo;attribut. Nous n&rsquo;avons cependant pas besoin de nous r\u00e9f\u00e9rer \u00e0 l&rsquo;attribut.<\/p>\n<p>En tant qu&rsquo;accessoires du composant, <code>PanelColorSettings<\/code>nous pouvons fournir un titre pour la section (titre dans la bo\u00eete r\u00e9ductible dans l&rsquo;inspecteur). La chose importante ici est l&rsquo;accessoire <code>colorSettings<\/code>o\u00f9 nous devons fournir un tableau d&rsquo;objets de r\u00e9glage de couleur. Pour chaque param\u00e8tre de couleur (nous n&rsquo;en avons actuellement qu&rsquo;un), nous devons fournir certaines propri\u00e9t\u00e9s. La propri\u00e9t\u00e9 <code>value<\/code>attend le code hexad\u00e9cimal actuellement choisi (m\u00eame si une couleur de palette a \u00e9t\u00e9 choisie). Ceci nous est fourni dans l&rsquo; <code>textColor<\/code>accessoire, \u00e0 l&rsquo;int\u00e9rieur de la propri\u00e9t\u00e9 <code>color<\/code>. Pour la <code>onChange<\/code>propri\u00e9t\u00e9, nous fournissons simplement la fonction &quot;set&quot; fournie par <code>withColors<\/code>, <code>setTextColor<\/code>. Et enfin, nous devrions donner un <code>label<\/code>afin que l&rsquo;utilisateur sache quel \u00e9l\u00e9ment cette couleur affectera. Il appara\u00eetra juste au-dessus de la zone de choix d&rsquo;une couleur.<\/p>\n<p>Voici comment notre composant appara\u00eet actuellement dans l&rsquo;\u00e9diteur Gutenberg\u00a0:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151572-61e4cc6b47b23.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-151572-61e4cc6b47b23.png\" alt=\"Comment ajouter des param\u00e8tres de couleur \u00e0 votre bloc Gutenberg personnalis\u00e9\"><\/a><\/p>\n<p>Il met maintenant \u00e0 jour avec succ\u00e8s nos attributs lors du choix des couleurs. Vous pouvez voir qu&rsquo;il se souvient de votre choix de couleur lors de l&rsquo;enregistrement du message.<\/p>\n<p>Cependant, rien ne se passe visuellement lorsque vous changez de couleur. Le choix de couleur est stock\u00e9 dans les attributs, mais aucun changement de couleur ne se produit dans l&rsquo;\u00e9diteur, ni lors de la pr\u00e9visualisation de la publication. C&rsquo;est parce que nous devons ajouter du code pour les classes et les styles du bloc. Nous devons le faire \u00e0 la fois pour la <code>edit<\/code>fonction (qui est pour l&rsquo;\u00e9diteur) et <code>save<\/code>la fonction (frontend). C&rsquo;est la prochaine \u00e9tape.<\/p>\n<h3>Gestion des styles de classe et en ligne dans<code>edit<\/code><\/h3>\n<p>Nous devons cr\u00e9er les attributs de classe et de style de n\u0153ud du bloc en fonction du param\u00e8tre de couleur choisi. Heureusement, <code>withColors<\/code>nous obtenons une certaine automatisation dans ce domaine. N&rsquo;oubliez pas qu&rsquo;il <code>props.textColor<\/code>s&rsquo;agit d&rsquo;un objet qui contient toutes les informations dont nous avons besoin, y compris le nom de la classe.<\/p>\n<p>Nous pourrions faire quelque chose comme ceci :<\/p>\n<pre><code>...\nconst BlockWithColorSettings = (props) =&gt; {\n    const { textColor, setTextColor } = props;  \/\/ Props received from withColors\n    let divClass;\n    let divStyles = {};\n    if (textColor != undefined) {\n        if (textColor.class != undefined) {\n            divClass = textColor.class;\n        } else {\n            divStyles.color = textColor.color;\n        }\n    }\n    return(\n        &lt;Fragment&gt;\n            &lt;InspectorControls&gt;\n                ...\n            &lt;\/InspectorControls&gt;\n            &lt;div className={divClass} style={divStyles}&gt;\n                PanelColorSettings Demo\n            &lt;\/div&gt;\n            ...<\/code><\/pre>\n<p>\u00c0 la ligne, <code>#20<\/code>nous appliquons la classe critique et le style en ligne au n\u0153ud racine de notre bloc. Avant cela, nous construisons la classe et l&rsquo;attribut de style en ligne en v\u00e9rifiant l&rsquo; <code>props.textColor<\/code>objet.<\/p>\n<p>Apr\u00e8s ce changement, votre bloc personnalis\u00e9 devrait maintenant \u00eatre enti\u00e8rement fonctionnel dans l&rsquo;\u00e9diteur. Chaque fois que vous changez de couleur, le bloc change la couleur du texte. Impressionnant! La derni\u00e8re \u00e9tape consiste \u00e0 le faire <code>save<\/code>\u00e9galement pour la fonction, afin que nous obtenions \u00e9galement ces classes et ces styles dans le frontend.<\/p>\n<h3>Gestion des styles de classe et en ligne dans<code>save<\/code><\/h3>\n<p>Le concept de construction des styles de classe et en ligne et de leur application au n\u0153ud racine est le m\u00eame dans <code>save<\/code>que dans <code>edit<\/code>. Mais il y a une diff\u00e9rence cruciale. Dans <code>save<\/code>nous n&rsquo;avons pas les accessoires fournis par <code>withColors<\/code>. Et nous ne pouvons pas ajouter de composants d&rsquo;ordre sup\u00e9rieur \u00e0 la <code>save<\/code>fonction. Ainsi, dans la <code>save<\/code>fonction, toutes les informations dont nous disposons sont les attributs.<\/p>\n<p>C&rsquo;est une bonne r\u00e8gle d&rsquo;or d&rsquo;\u00e9viter de coder en dur les noms de classe &quot;has-&quot;. Et si WordPress d\u00e9cidait de changer cette r\u00e8gle \u00e0 l&rsquo;avenir? Heureusement, nous avons une fonction qui peut nous aider \u00e0 g\u00e9n\u00e9rer les bons noms de classe pour nous: <code>getColorClassName()<\/code>.<\/p>\n<p>Avant d&rsquo;oublier, d\u00e9structurons-le. C&rsquo;est aussi dans le <code>wp.blockEditor<\/code>paquet.<\/p>\n<pre><code>const { InspectorControls, PanelColorSettings, withColors, getColorClassName } = wp.blockEditor;<\/code><\/pre>\n<p>L&rsquo;utilisation de la <code>getColorClassName()<\/code>fonction n\u00e9cessite deux param\u00e8tres. D&rsquo;abord une cha\u00eene pour la r\u00e8gle CSS. \u00c9tant donn\u00e9 que notre param\u00e8tre de couleur concerne la couleur du texte, nous fournissons &lsquo; <code>color<\/code>&lsquo;. Cela indique \u00e0 la fonction qu&rsquo;elle doit renvoyer un nom de classe &quot;a-quelque chose-couleur&quot; et non &quot;a-quelque chose-couleur-arri\u00e8re-plan&quot; par exemple. Comme deuxi\u00e8me param\u00e8tre, nous devons fournir la valeur de l&rsquo;attribut.<\/p>\n<p>L&rsquo;attribut style est simplement construit en d\u00e9finissant \u00abcolor\u00bb sur la valeur de l&rsquo;attribut <code>customTextColor<\/code>, s&rsquo;il est d\u00e9fini.<\/p>\n<pre><code>save: (props) =&gt; { \n    const { textColor, customTextColor } = props.attributes;\n    let divClass;\n    let divStyles = {};\n    if (textColor != undefined) {\n        divClass = getColorClassName('color', textColor);\n    }\n    if (customTextColor != undefined) {\n        divStyles.color = customTextColor;\n    }\n    return(\n        &lt;div className={divClass} style={divStyles}&gt;\n            PanelColorSettings Demo\n        &lt;\/div&gt;\n    );\n}<\/code><\/pre>\n<p>Et bien s\u00fbr, n&rsquo;oubliez pas d&rsquo;appliquer la classe et le style sur le n\u0153ud racine de votre bloc ; comme en ligne <code>#12<\/code>.<\/p>\n<p>PS: Si vous testez votre bloc dans l&rsquo;\u00e9diteur en \u00e9crivant ce code, vous obtiendrez maintenant une erreur de bloc. Cela se produit parce que nous avons maintenant modifi\u00e9 la sortie de la <code>save<\/code>fonction et que tout ce que vous avez enregistr\u00e9 pr\u00e9c\u00e9demment est en conflit. Vous devrez supprimer le bloc et le rajouter \u00e0 nouveau.<\/p>\n<p>Apr\u00e8s ce changement, votre bloc devrait maintenant appliquer correctement la couleur de texte choisie dans le frontend \u00e9galement.<\/p>\n<p>Et c&rsquo;est tout! Vous avez maintenant impl\u00e9ment\u00e9 avec succ\u00e8s les param\u00e8tres de couleur dans votre bloc. Si vous souhaitez ajouter plusieurs param\u00e8tres de couleur (pas seulement la couleur du texte), lisez la suite.<\/p>\n<h2>Remarque sur les param\u00e8tres de couleurs multiples<\/h2>\n<p>\u00c0 pr\u00e9sent, vous devriez \u00eatre en mesure d&rsquo;impl\u00e9menter plusieurs param\u00e8tres de couleur. Vous voudrez peut-\u00eatre ajouter des param\u00e8tres pour la couleur d&rsquo;arri\u00e8re-plan, la couleur du texte, la couleur de la bordure ou quoi que ce soit d&rsquo;autre pour votre bloc. Dans cette section, je vais faire un bref aper\u00e7u de ce que nous devons faire pour impl\u00e9menter plusieurs param\u00e8tres de couleur.<\/p>\n<p>Supposons que je souhaite \u00e9galement ajouter une couleur d&rsquo;arri\u00e8re-plan \u00e0 mon bloc.<\/p>\n<p>Je dois d&rsquo;abord d\u00e9finir un nouvel attribut nomm\u00e9 de mani\u00e8re cr\u00e9ative <code>backgroundColor<\/code>. Je d\u00e9finis \u00e9galement un autre attribut <code>customBackgroundColor<\/code>.<\/p>\n<p>Dans la <code>edit<\/code>fonction, je change l&rsquo;objet fourni en <code>withColors<\/code>tant que tel:<\/p>\n<pre><code>withColors({textColor: 'color', backgroundColor: 'background-color'})<\/code><\/pre>\n<p>Cela indique <code>withColors<\/code>que mon <code>textColor<\/code>attribut est pour la r\u00e8gle CSS &quot; <code>color<\/code>&quot; (pour la couleur du texte), et l&rsquo;attribut <code>backgroundColor<\/code>est pour la r\u00e8gle CSS &quot; <code>background-color<\/code>&quot;. <code>withColors<\/code>reconna\u00eetra et mettra \u00e9galement \u00e0 jour automatiquement les attributs et <code>customTextColor<\/code>.<code>customBackgroundColor<\/code><\/p>\n<p>Dans le <code>PanelColorSettings<\/code>composant, je fournis un autre objet au tableau au prop <code>colorSettings<\/code>. Ainsi:<\/p>\n<pre><code>&lt;PanelColorSettings \n    title={__('Color settings')}\n    colorSettings={[\n        {\n            value: textColor.color,\n            onChange: setTextColor,\n            label: __('Text color')\n        },\n        {\n            value: backgroundColor.color,\n            onChange: setBackgroundColor,\n            label: __('Background color')\n        },\n    ]}\n\/&gt;<\/code><\/pre>\n<p>Avec cela, vous devriez obtenir deux param\u00e8tres de couleur distincts dans la zone Inspecteur pour les param\u00e8tres de couleur.<\/p>\n<p>La derni\u00e8re \u00e9tape consiste \u00e0 cr\u00e9er les noms et les styles de classe appropri\u00e9s dans <code>edit<\/code>et <code>save<\/code>. Il s&rsquo;agit d&rsquo;une \u00e9tape assez simple car il s&rsquo;agit simplement de cr\u00e9er correctement une cha\u00eene ou un objet de style. N&rsquo;oubliez pas que votre nom de classe doit prendre en charge plusieurs classes de couleurs (par exemple, si la couleur du texte et la couleur d&rsquo;arri\u00e8re-plan ont \u00e9t\u00e9 choisies). Ajoutez simplement un espace entre chaque nom de classe.<\/p>\n<p>PS\u00a0: si vous devez g\u00e9rer de nombreux noms de classe pour votre bloc, vous pourriez b\u00e9n\u00e9ficier de l&rsquo;installation du <code>classnames<\/code>package. Presque tous les composants de Gutenberg utilisent cette biblioth\u00e8que pour combiner plus facilement les noms de classe.<\/p>\n<h2>Conclusion et code complet<\/h2>\n<p>Vous devriez maintenant avoir appris \u00e0 impl\u00e9menter les param\u00e8tres de couleur dans votre bloc personnalis\u00e9. J&rsquo;esp\u00e8re que cela vous a \u00e9t\u00e9 utile! J&rsquo;ai d\u00fb ajouter cette fonctionnalit\u00e9 \u00e0 mon projet, et je n&rsquo;ai vraiment trouv\u00e9 aucune information ou bonne documentation. C&rsquo;est donc le r\u00e9sultat de la consolidation de tout ce que j&rsquo;ai appris sur ce sujet, apr\u00e8s de nombreux essais et erreurs.<\/p>\n<p>Voici le code final, au total, pour l&rsquo;exemple de bloc personnalis\u00e9 avec r\u00e9glage de la couleur du texte\u00a0:<\/p>\n<pre><code>const { registerBlockType } = wp.blocks;\nconst { __ } = wp.i18n;\nconst { Fragment } = wp.element;\nconst { InspectorControls, PanelColorSettings, withColors, getColorClassName } = wp.blockEditor;\n\u00a0\nconst BlockWithColorSettings = (props) =&gt; {\n    const { textColor, setTextColor } = props;  \/\/ Props received from withColors\n\u00a0\n    let divClass;\n    let divStyles = {};\n    if (textColor != undefined) {\n        if (textColor.class != undefined) {\n            divClass = textColor.class;\n        } else {\n            divStyles.color = textColor.color;\n        }\n    }\n    return(\n        &lt;Fragment&gt;\n            &lt;InspectorControls&gt;\n                &lt;PanelColorSettings \n                    title={__('Color settings')}\n                    colorSettings={[\n                        {\n                            value: textColor.color,\n                            onChange: setTextColor,\n                            label: __('Text color')\n                        },\n                    ]}\n                \/&gt;\n            &lt;\/InspectorControls&gt;\n            &lt;div className={divClass} style={divStyles}&gt;\n                PanelColorSettings Demo\n            &lt;\/div&gt;\n        &lt;\/Fragment&gt;\n    );\n}\n\u00a0\nregisterBlockType('awp\/colorsettings', {\n    title: __('Color Settings Demo'),\n    icon: 'carrot',\n    category: 'common',\n    attributes: {\n        textColor: {\n            type: 'string'\n        },\n        customTextColor: {\n            type: 'string'\n        },\n    },\n    edit: withColors({textColor: 'color'})(BlockWithColorSettings),\n    save: (props) =&gt; { \n        const { textColor, customTextColor } = props.attributes;\n        let divClass;\n        let divStyles = {};\n        if (textColor != undefined) {\n            divClass = getColorClassName('color', textColor);\n        }\n        if (customTextColor != undefined) {\n            divStyles.color = customTextColor;\n        }\n        return(\n            &lt;div className={divClass} style={divStyles}&gt;\n                PanelColorSettings Demo\n            &lt;\/div&gt;\n        );\n    }\n});<\/code><\/pre>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cet article explique en d\u00e9tail comment ajouter des param\u00e8tres de couleur \u00e0 votre bloc WordPress Gutenberg personnalis\u00e9, de la bonne mani\u00e8re &#8211; tout comme les blocs WordPress le font.<\/p>\n","protected":false},"author":1,"featured_media":151573,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[936,936,1110,801,801,811,811,841,841,862,862],"tags":[1167],"class_list":["post-234275","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gutenberg-3","category-n-a","category-php-3","category-plugins-2","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234275","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=234275"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234275\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/151573"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=234275"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=234275"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=234275"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}