{"id":234244,"date":"2023-02-20T15:49:00","date_gmt":"2023-02-20T12:49:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234244"},"modified":"2023-02-24T18:21:02","modified_gmt":"2023-02-24T15:21:02","slug":"ajouter-une-barre-laterale-dinspecteur-personnalise-dans-wordpress-gutenberg-avec-post-meta","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/ajouter-une-barre-laterale-dinspecteur-personnalise-dans-wordpress-gutenberg-avec-post-meta\/","title":{"rendered":"Ajouter une barre lat\u00e9rale d&rsquo;inspecteur personnalis\u00e9 dans WordPress Gutenberg avec Post Meta"},"content":{"rendered":"\n<p>Dans ce didacticiel, nous verrons comment ajouter une barre lat\u00e9rale personnalis\u00e9e \u00e0 l&rsquo;inspecteur (barre lat\u00e9rale droite) dans WordPress Gutenberg. \u00c0 l&rsquo;int\u00e9rieur, nous allons impl\u00e9menter un champ connect\u00e9 \u00e0 une m\u00e9ta post. Tout est impl\u00e9ment\u00e9 avec Javascript, dans l&rsquo;\u00e9diteur Gutenberg, et constitue une alternative \u00e0 l&rsquo;ajout de m\u00e9taboxes de mani\u00e8re traditionnelle.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152503-61e4e03345086.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-152503-61e4e03345086.png\" alt=\"Ajouter une barre lat\u00e9rale d&#039;inspecteur personnalis\u00e9 dans WordPress Gutenberg avec Post Meta\"><\/a><\/p>\n<h3>La t\u00eate haute!<\/h3>\n<p>Ceci est un tutoriel pour cr\u00e9er votre propre barre lat\u00e9rale personnalis\u00e9e. Mais si vous souhaitez simplement ajouter des m\u00e9ta\/param\u00e8tres \u00e0 la barre lat\u00e9rale standard de l&rsquo;inspecteur (onglet &quot;Document&quot;), j&rsquo;ai un tutoriel pour cela\u00a0:<\/p>\n<h2>Ce que nous allons cr\u00e9er<\/h2>\n<p>WordPress Gutenberg permet aux d\u00e9veloppeurs de cr\u00e9er des barres lat\u00e9rales personnalis\u00e9es en cr\u00e9ant un plugin dit Javascript. (\u00c0 ne pas confondre avec les plugins WordPress traditionnels). En utilisant un plugin Javascript, nous pouvons cr\u00e9er une nouvelle barre lat\u00e9rale et \u00e9galement nous connecter au menu &quot;Outils et options&quot;.<\/p>\n<p>Nous ajouterons un nouvel \u00e9l\u00e9ment de menu dans les &quot;Outils&quot; qui ouvrira notre barre lat\u00e9rale personnalis\u00e9e. Le contenu de la barre lat\u00e9rale d\u00e9pend enti\u00e8rement de vous, mais je vais passer en revue quelques exemples, y compris comment connecter un champ m\u00e9ta post \u00e0 l&rsquo;int\u00e9rieur.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152503-61e4e0343f620.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-152503-61e4e0343f620.png\" alt=\"Ajouter une barre lat\u00e9rale d&#039;inspecteur personnalis\u00e9 dans WordPress Gutenberg avec Post Meta\"><\/a><\/p>\n<h2>Configuration de votre Javascript<\/h2>\n<p>Pour ce tutoriel, j&rsquo;\u00e9crirai ES6\/ESNext Javascript avec JSX, ce qui signifie que nous devons configurer un compilateur. Si vous souhaitez suivre et ne pas \u00e9crire de Javascript ES5, vous devrez configurer un environnement de d\u00e9veloppement qui compile votre Javascript au fur et \u00e0 mesure. Si vous n&rsquo;\u00eates pas familier avec cela, <a href=\"https:\/\/wordpress.mediadoma.com\/fr\/guide-complet-sur-la-configuration-dun-environnement-de-developpement-pour-gutenberg\/\" title=\"suivez mon article expliquant comment le configurer\">suivez mon article expliquant comment le configurer<\/a>, puis revenez ici.<\/p>\n<p>J&rsquo;ai configur\u00e9 mon <code>webpack.config.js<\/code>pour compiler mon fichier Javascript source dans le dossier <code>\/assets\/js\/sidebar-plugin.js<\/code>. Ce fichier compil\u00e9 est ce dont nous avons besoin pour mettre en file d&rsquo;attente l&rsquo;\u00e9diteur Gutenberg. Pendant que j&rsquo;\u00e9cris ce code, j&rsquo;ai d\u00e9marr\u00e9 le compilateur d&rsquo;ex\u00e9cution qui recompile le Javascript \u00e0 chaque fois que j&rsquo;enregistre des modifications dans le code source (<code>npm run start<\/code>). Tout cela est expliqu\u00e9 en profondeur dans le tutoriel mentionn\u00e9 pr\u00e9c\u00e9demment.<\/p>\n<p>J&rsquo;\u00e9cris ceci dans un th\u00e8me, mais cela fonctionne de la m\u00eame mani\u00e8re dans un plugin. N&rsquo;oubliez pas d&rsquo;ajuster les chemins lors de l&rsquo;ajout du script \u00e0 l&rsquo;\u00e9diteur.<\/p>\n<h2>Ajout du script \u00e0 l&rsquo;\u00e9diteur<\/h2>\n<p>Pour ajouter notre script \u00e0 l&rsquo;\u00e9diteur Gutenberg, nous devons \u00e9crire du PHP. Si vous \u00eates dans un th\u00e8me, <code>functions.php<\/code>c&rsquo;est un bon endroit pour commencer, ou quelque part dans vos fichiers de plugin. Notez que nous devons ajouter le script compil\u00e9 final, pas le code source. Dans mon exemple, le Javascript compil\u00e9 se trouve dans le dossier <code>\/assets\/js\/sidebar-plugin.js<\/code>.<\/p>\n<p>Nous cr\u00e9ons une fonction accroch\u00e9e \u00e0 <code>enqueue_block_editor_assets<\/code>. A l&rsquo;int\u00e9rieur on fait comme d&rsquo;habitude <code>[wp_enqueue_script](https:\/\/developer.wordpress.org\/reference\/functions\/wp_enqueue_script\/)()<\/code>. En tant que d\u00e9pendances au script, nous en ajoutons deux\u00a0; <code>wp-plugins<\/code>, et <code>wp-edit-post<\/code>. Ces deux packages doivent \u00eatre charg\u00e9s avant notre script car nous utilisons leurs fonctions.<\/p>\n<pre><code>add_action('enqueue_block_editor_assets', function() {\n    wp_enqueue_script('awp-sidebar-plugin', get_stylesheet_directory_uri(). '\/assets\/js\/sidebar-plugin.js', ['wp-plugins', 'wp-edit-post']);\n});<\/code><\/pre>\n<p>Parce que nous mettons le script en file d&rsquo;attente dans le crochet <code>enqueue_block_editor_assets<\/code>, notre script ne sera charg\u00e9 que lorsque l&rsquo;\u00e9diteur Gutenberg est actif. Super! Maintenant tout est pr\u00eat pour \u00e9crire notre plugin Javascript.<\/p>\n<h2>Enregistrer un plugin Javascript<\/h2>\n<p>La premi\u00e8re \u00e9tape consiste \u00e0 enregistrer un plugin. Nous faisons cela avec la <code>[registerPlugin](https:\/\/github.com\/WordPress\/gutenberg\/tree\/master\/packages\/plugins#registerPlugin)<\/code>fonction dans wp.plugins \u00e0 l&rsquo;int\u00e9rieur du <code>wp.plugins<\/code>package.<\/p>\n<p>En tant que param\u00e8tre du registerPlugin, nous fournissons un nom (assurez-vous qu&rsquo;il est unique) et un objet avec des param\u00e8tres. Au minimum, vous devez fournir un composant pour la propri\u00e9t\u00e9 de rendu. Vous pouvez \u00e9galement \u00e9ventuellement ajouter une ic\u00f4ne \u00e0 partir <a href=\"https:\/\/developer.wordpress.org\/resource\/dashicons\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">des dashicons de WordPress<\/a>. Gardez \u00e0 l&rsquo;esprit que si vous ne sp\u00e9cifiez pas d&rsquo;ic\u00f4ne, il reviendra \u00e0 l&rsquo;ic\u00f4ne du plugin. \u00c0 des fins de d\u00e9monstration, j&rsquo;utilise l&rsquo; <code>'carrot'<\/code>ic\u00f4ne .<\/p>\n<p>En ce qui concerne le composant, nous commen\u00e7ons par d\u00e9finir un composant de base qui renvoie un simple div contenant du texte al\u00e9atoire. Et avant tout le code nous d\u00e9structurons les fonctions des packages que nous voulons utiliser.<\/p>\n<pre><code>const { registerPlugin } = wp.plugins;\n\u00a0\nconst CustomSidebarComponent =() =&gt; {\n    return(\n        &lt;div&gt;Hey!&lt;\/div&gt;\n    );\n}\n\u00a0\nregisterPlugin('awp-customsidebar', {\n    render: CustomSidebarComponent,\n    icon: 'carrot'\n});<\/code><\/pre>\n<p>Si rien ne se passe (pas m\u00eame des erreurs) lorsque vous actualisez Gutenberg, nous sommes tous pr\u00eats \u00e0 partir. Nous ne voyons pas notre composant car nous n&rsquo;avons pas indiqu\u00e9 \u00e0 WordPress o\u00f9 le rendre. La prochaine \u00e9tape consiste \u00e0 s&rsquo;accrocher au menu de la barre lat\u00e9rale personnalis\u00e9e et aux composants du menu des outils pour rendre nos \u00e9l\u00e9ments.<\/p>\n<h2>Enregistrer une barre lat\u00e9rale personnalis\u00e9e<\/h2>\n<p>Mais d&rsquo;abord une explication sur la fa\u00e7on dont Gutenberg g\u00e8re les barres lat\u00e9rales personnalis\u00e9es et pourquoi nous devons faire ce que nous ferons. Lorsque nous enregistrons avec succ\u00e8s une barre lat\u00e9rale personnalis\u00e9e, une chose se produit automatiquement au d\u00e9part. Gutenberg ajoutera un raccourci \u00e0 notre barre lat\u00e9rale dans la barre d&rsquo;outils sup\u00e9rieure, \u00e0 c\u00f4t\u00e9 du menu Outils. Cela se produit parce que notre barre lat\u00e9rale est automatiquement &quot;\u00e9pingl\u00e9e&quot;.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152503-61e4e0353bff7.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-152503-61e4e0353bff7.png\" alt=\"Ajouter une barre lat\u00e9rale d&#039;inspecteur personnalis\u00e9 dans WordPress Gutenberg avec Post Meta\"><\/a><\/p>\n<p>Le probl\u00e8me d&rsquo;ajouter simplement une barre lat\u00e9rale personnalis\u00e9e est que n&rsquo;importe quel utilisateur peut &quot;d\u00e9tacher&quot; ce raccourci. Quand ils font cela, il n&rsquo;y a plus de point d&rsquo;acc\u00e8s pour ouvrir \u00e0 nouveau la barre lat\u00e9rale\u00a0! C&rsquo;est pourquoi nous devons \u00e9galement ajouter un \u00e9l\u00e9ment de menu au menu Outils.<\/p>\n<p>L&rsquo;enregistrement d&rsquo;une barre lat\u00e9rale personnalis\u00e9e se fait avec le composant <code>PluginSidebar<\/code>du <code>wp.editPost<\/code>package. L&rsquo;ajout d&rsquo;un \u00e9l\u00e9ment de menu au menu Outils se fait avec le composant bien nomm\u00e9 <code>PluginSidebarMoreMenuItem<\/code>(\u00e9galement dans le <code>wp.editPost<\/code>package).<\/p>\n<p>Pour le <code>PluginSidebar<\/code>composant, nous devons fournir des accessoires. Vous devez fournir au minimum <code>name<\/code>et <code>title<\/code>. L&rsquo;accessoire <code>title<\/code>est explicite, c&rsquo;est le nom qui appara\u00eetra en haut de la barre lat\u00e9rale. Dans l&rsquo;accessoire <code>name<\/code>, fournissez une limace unique. Lorsque vous ajoutez l&rsquo;\u00e9l\u00e9ment de menu, vous devez vous r\u00e9f\u00e9rer \u00e0 ce slug.<\/p>\n<p>L&rsquo;ajout d&rsquo;un <code>PluginSidebarMoreMenuItem<\/code>composant (menu outils) n\u00e9cessite au minimum un accessoire\u00a0; <code>target<\/code>. Ici, vous fournissez le m\u00eame nom que celui que vous avez donn\u00e9 dans la <code>name<\/code>prop de la barre lat\u00e9rale. Comme contenu du composant, vous \u00e9crivez le texte qui sera affich\u00e9 comme \u00e9l\u00e9ment de menu. Habituellement, ce serait le m\u00eame que celui de la barre lat\u00e9rale <code>title<\/code>.<\/p>\n<p>\u00c9tant donn\u00e9 que React n\u00e9cessite un seul n\u0153ud d&#8217;emballage autour du retour du composant, nous encapsulons tout dans un <code>Fragment<\/code>composant (\u00e0 partir du <code>wp.element<\/code>package). J&#8217;emballe \u00e9galement mes cha\u00eenes \u00e0 <code>__()<\/code>partir du <code>wp.i18n<\/code>paquet pour permettre la traduction.<\/p>\n<pre><code>const { registerPlugin } = wp.plugins;\nconst { __ } = wp.i18n;\nconst { Fragment } = wp.element;\nconst { PluginSidebarMoreMenuItem, PluginSidebar } = wp.editPost;\n\u00a0\nconst CustomSidebarComponent =() =&gt; {\n    return(\n        &lt;Fragment&gt;\n            &lt;PluginSidebar \n                name=\"awp-custom-sidebar\" \n                title={__('My Custom sidebar', 'awp')}\n            &gt;Hello there.&lt;\/PluginSidebar&gt;\n            &lt;PluginSidebarMoreMenuItem \n                target='awp-custom-sidebar'\n                &gt;{__('My Custom sidebar', 'awp')}&lt;\/PluginSidebarMoreMenuItem&gt;\n        &lt;\/Fragment&gt;\n    );\n}\n\u00a0\nregisterPlugin('awp-customsidebar', {\n    render: CustomSidebarComponent,\n    icon: 'carrot'\n});<\/code><\/pre>\n<p>Avec le code ci-dessus, nous obtiendrons les deux (tr\u00e8s probablement trois) choses suivantes. Vous obtiendrez un raccourci d&rsquo;ic\u00f4ne de carotte dans la barre d&rsquo;outils (si vous ne l&rsquo;avez pas encore retir\u00e9). Cliquer dessus ouvrira la barre lat\u00e9rale. Vous aurez \u00e9galement un nouvel \u00e9l\u00e9ment de menu dans la barre lat\u00e9rale du menu Outils, sous le titre &quot;Plugins&quot;.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152503-61e4e036136de.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-152503-61e4e036136de.png\" alt=\"Ajouter une barre lat\u00e9rale d&#039;inspecteur personnalis\u00e9 dans WordPress Gutenberg avec Post Meta\"><\/a><\/p>\n<h2>Ajouter du contenu \u00e0 la barre lat\u00e9rale<\/h2>\n<p>Le contenu r\u00e9el de la barre lat\u00e9rale d\u00e9pend enti\u00e8rement de vous. Vous avez juste besoin d&rsquo;ajouter du HTML ou des composants \u00e0 l&rsquo;int\u00e9rieur du <code>PluginSidebar<\/code>composant avec ce que vous voulez (\u00e0 la place du texte &quot;Hello there.&quot;).<\/p>\n<p>Vous remarquerez peut-\u00eatre que le contenu de la barre lat\u00e9rale manque de rembourrage. Ceci est intentionnel car l&rsquo;id\u00e9e est que vous allez cr\u00e9er des panneaux \u00e0 l&rsquo;int\u00e9rieur de cette barre lat\u00e9rale. Les panneaux sont les sections pliables de la barre lat\u00e9rale normale de Gutenberg. Ce sont des composants que vous pouvez tr\u00e8s facilement ajouter dans votre barre lat\u00e9rale personnalis\u00e9e. Vous pouvez ajouter autant de panneaux que vous le souhaitez et ils sont parfaits pour regrouper diff\u00e9rentes choses.<\/p>\n<h3>Ajout de panneaux dans notre barre lat\u00e9rale<\/h3>\n<p>Voyons rapidement comment nous pouvons ajouter des panneaux \u00e0 notre barre lat\u00e9rale. Si vous avez cr\u00e9\u00e9 vos propres types de blocs personnalis\u00e9s, vous connaissez peut-\u00eatre ces composants. Nous utilisons <code>PanelBody<\/code>et \u00e9ventuellement <code>PanelRow<\/code>\u00e0 partir du <code>wp.components<\/code>package.<\/p>\n<p>Pour un <code>PanelBody<\/code>composant vous fournissez au minimum le prop <code>title<\/code>. Vous pouvez \u00e9ventuellement fournir true ou false \u00e0 la <code>initialOpen<\/code>prop pour d\u00e9cider si le panneau doit \u00eatre d\u00e9velopp\u00e9 par d\u00e9faut ou non. Comme le contenu \u00e0 l&rsquo;int\u00e9rieur du composant est tout \u00e0 l&rsquo;int\u00e9rieur du panneau.<\/p>\n<p>\u00c0 l&rsquo; int\u00e9rieur d&rsquo;un <code>PanelBody<\/code>, vous pouvez \u00e9ventuellement utiliser des <code>PanelRow<\/code>composants. Ils ne sont pas vraiment n\u00e9cessaires mais peuvent vous aider \u00e0 obtenir un bon style pour le contenu de votre panneau.<\/p>\n<p>Par exemple, ajoutons deux panneaux \u00e0 notre barre lat\u00e9rale personnalis\u00e9e.<\/p>\n<pre><code>const { registerPlugin } = wp.plugins;\nconst { __ } = wp.i18n;\nconst { Fragment } = wp.element;\nconst { PluginSidebarMoreMenuItem, PluginSidebar } = wp.editPost;\nconst { PanelBody, PanelRow } = wp.components;\n\u00a0\nconst CustomSidebarComponent = () =&gt; {\n    return(\n        &lt;Fragment&gt;\n            &lt;PluginSidebarMoreMenuItem \n                target='awp-custom-sidebar'\n                &gt;{__('My Custom sidebar', 'awp')}&lt;\/PluginSidebarMoreMenuItem&gt;\n            &lt;PluginSidebar \n                name=\"awp-custom-sidebar\" \n                title={__('My Custom sidebar', 'awp')}\n            &gt;                \n                &lt;PanelBody\n                    title={__('This is a panel section', 'awp')}\n                    initialOpen={true}\n                &gt;\n                    &lt;PanelRow&gt;\n                        Put any component or content here.\n                    &lt;\/PanelRow&gt;\n                &lt;\/PanelBody&gt;\n                &lt;PanelBody\n                    title={__('Another section', 'awp')}\n                    initialOpen={false}\n                &gt;\n                    &lt;PanelRow&gt;\n                        This is a collapsed section by default.\n                    &lt;\/PanelRow&gt;\n                &lt;\/PanelBody&gt;\n            &lt;\/PluginSidebar&gt;\n        &lt;\/Fragment&gt;\n    );\n}\n\u00a0\nregisterPlugin('awp-customsidebar', {\n    render: CustomSidebarComponent,\n    icon: 'carrot'\n});<\/code><\/pre>\n<p>Avec ce code, notre barre lat\u00e9rale personnalis\u00e9e commence vraiment \u00e0 ressembler \u00e0 Gutenberg\u00a0!<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152503-61e4e036ce025.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-152503-61e4e036ce025.png\" alt=\"Ajouter une barre lat\u00e9rale d&#039;inspecteur personnalis\u00e9 dans WordPress Gutenberg avec Post Meta\"><\/a><\/p>\n<h2>Ajout de champs post-m\u00e9ta \u00e0 la barre lat\u00e9rale personnalis\u00e9e<\/h2>\n<p>Maintenant, nous entrons vraiment dans le vif du sujet des \u00e9l\u00e9ments utiles pour une barre lat\u00e9rale personnalis\u00e9e ; ajouter des param\u00e8tres et stocker leurs valeurs. Mais nous devons d&rsquo;abord comprendre comment.<\/p>\n<p>Il est tr\u00e8s facile d&rsquo;ajouter des champs de param\u00e8tres (entr\u00e9es, cases \u00e0 cocher, champs de basculement, etc.) dans la barre lat\u00e9rale en utilisant les composants pr\u00eats \u00e0 l&#8217;emploi des packages WordPress. Cependant, nous devons consid\u00e9rer comment stocker les valeurs. L&rsquo;option \u00e9vidente est de les stocker en tant que post m\u00e9ta. Mais connecter un param\u00e8tre \u00e0 un champ post-m\u00e9ta n\u00e9cessite du code suppl\u00e9mentaire. Plus pr\u00e9cis\u00e9ment, nous devons utiliser des composants dits <a href=\"https:\/\/reactjs.org\/docs\/higher-order-components.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">d&rsquo;ordre sup\u00e9rieur<\/a> afin de r\u00e9cup\u00e9rer et de mettre \u00e0 jour la m\u00e9ta post dans Javascript. Nous devons \u00e9galement enregistrer chaque m\u00e9ta de publication \u00e0 l&rsquo;aide de PHP et les rendre disponibles pour l&rsquo;API REST.<\/p>\n<p>Pour terminer ce didacticiel, je vais vous montrer comment ajouter une m\u00e9ta post avec une cl\u00e9 <code>awp_my_custom_meta<\/code>qui doit \u00eatre stock\u00e9e comme vraie ou fausse. Dans la barre lat\u00e9rale, il sera affich\u00e9 sous la forme d&rsquo;un champ bascule (un composant vrai\/faux).<\/p>\n<h3>Enregistrer la post-m\u00e9ta pour l&rsquo;API REST<\/h3>\n<p>La premi\u00e8re \u00e9tape pour ajouter des post-m\u00e9ta dans notre fichier Javascript consiste \u00e0 les enregistrer et \u00e0 les d\u00e9finir comme accessibles dans l&rsquo;API REST. Pour ce faire, nous revenons \u00e0 nouveau \u00e0 PHP.<\/p>\n<p>\u00c0 l&rsquo;int\u00e9rieur d&rsquo;une fonction accroch\u00e9e \u00e0 l&rsquo; <code>init<\/code>action, nous utilisons la <code>[register_meta](https:\/\/developer.wordpress.org\/reference\/functions\/register_meta\/)()<\/code>fonction. En tant que param\u00e8tres, nous devons d\u00e9finir le type d&rsquo;objet comme &lsquo; <code>post<\/code>&lsquo; car nous l&rsquo;utilisons comme post meta (cela n&rsquo;exclut pas, par exemple, le type de publication de page). Nous fournissons la cl\u00e9 m\u00e9ta, puis un tableau d&rsquo;arguments. La chose critique \u00e0 ajouter dans le tableau d&rsquo;arguments est de d\u00e9finir &lsquo; <code>show_in_rest<\/code>&lsquo; sur <code>true<\/code>. Post meta est couramment utilis\u00e9 comme &lsquo; <code>single<\/code>&lsquo; (pensez \u00e0 la fa\u00e7on dont vous utilisez <code>get_post_meta()<\/code>). Nous d\u00e9finissons \u00e9galement le <code>type<\/code>. Quant \u00e0 notre cas, nous l&rsquo;avons d\u00e9fini sur &lsquo; <code>boolean<\/code>&lsquo;.<\/p>\n<pre><code>add_action('init', function() {\n    register_meta('post', 'awp_my_custom_meta', [\n        'show_in_rest' =&gt; true,\n        'single' =&gt; true,\n        'type' =&gt; 'boolean'\n    ]);\n});<\/code><\/pre>\n<p>Avec ce code, le <code>awp_my_custom_meta<\/code>champ m\u00e9ta &lsquo; &lsquo; post est accessible depuis Gutenberg. Vous devez r\u00e9p\u00e9ter la <code>register_meta()<\/code>m\u00e9ta pour chaque publication que vous souhaitez ajouter dans votre barre lat\u00e9rale.<\/p>\n<p>Revenons maintenant \u00e0 notre Javascript.<\/p>\n<h3>Ajouter un param\u00e8tre \u00e0 notre barre lat\u00e9rale<\/h3>\n<p>Commen\u00e7ons par la partie la plus facile\u00a0: ajouter l&rsquo;entr\u00e9e \u00e0 notre barre lat\u00e9rale. Plus tard, nous ajouterons plus de code pour connecter r\u00e9ellement le champ de configuration \u00e0 la publication de m\u00e9ta. En raison de la fa\u00e7on dont nous devons proc\u00e9der, nous d\u00e9finissons un nouveau composant distinct pour notre environnement. Ainsi, \u00e0 l&rsquo;int\u00e9rieur du panneau auquel vous souhaitez ajouter vos param\u00e8tres, appelez simplement ce nouveau composant.<\/p>\n<p>Appelons le composant <code>CustomSidebarMetaComponent<\/code>(vous pourriez l&rsquo;appeler quelque chose de pertinent pour votre projet). \u00c0 l&rsquo;int\u00e9rieur de ce composant, nous voulons rendre un champ bascule. Pour ce faire, nous utilisons le <code>ToggleControl<\/code>composant du <code>wp.components<\/code>package. En tant qu&rsquo;accessoires du ToggleControl, nous fournissons une \u00e9tiquette appropri\u00e9e dans l&rsquo; <code>title<\/code>accessoire. Un ToggleControl a \u00e9galement besoin des accessoires <code>onChange<\/code>pour mettre \u00e0 jour la valeur et <code>checked<\/code>pour la valeur actuelle. Nous allons omettre ces deux pour l&rsquo;instant jusqu&rsquo;\u00e0 la prochaine \u00e9tape.<\/p>\n<pre><code>...\nconst { PanelBody, PanelRow, ToggleControl } = wp.components;\n\u00a0\nconst CustomSidebarMetaComponent = () =&gt; {\n    return(\n        &lt;ToggleControl\n            label={__('My custom post meta', 'awp')}\n        \/&gt;\n    );\n}\n\u00a0\nconst CustomSidebarComponent = () =&gt; {\n    return(\n        ...       \n        &lt;PanelBody\n            title={__('This is a panel section', 'awp')}\n            initialOpen={true}\n        &gt;\n            &lt;PanelRow&gt;\n                &lt;CustomSidebarMetaComponent \/&gt;\n            &lt;\/PanelRow&gt;\n        &lt;\/PanelBody&gt;\n        ...<\/code><\/pre>\n<p>Avec le code ci-dessus, vous devriez obtenir un champ bascule dans la barre lat\u00e9rale. Il n&rsquo;est pas coch\u00e9 et rien ne se passe lorsque vous cliquez dessus. C&rsquo;est la prochaine \u00e9tape: le connecter \u00e0 notre post meta.<\/p>\n<h3>Acc\u00e9der \u00e0 la m\u00e9ta post avec withSelect et withDispatch<\/h3>\n<p>Afin d&rsquo;acc\u00e9der et de mettre \u00e0 jour une m\u00e9ta-valeur de publication, nous devons utiliser des composants d&rsquo;ordre sup\u00e9rieur (HOC) pour acc\u00e9der \u00e0 la version des magasins WordPress (similaire \u00e0 Redux). WordPress nous fournit quelques HOC utiles avec des fonctions que nous pouvons utiliser dans le <code>wp.data<\/code>package.<\/p>\n<p>Le composant d&rsquo;ordre sup\u00e9rieur <code>[withSelect](https:\/\/developer.wordpress.org\/block-editor\/packages\/packages-data\/#withSelect)<\/code>fournit \u00e0 notre composant des accessoires qui sont, dans notre cas, extraits de la post m\u00e9ta. Nous l&rsquo;utilisons pour obtenir la valeur de notre post meta. \u00c0 l&rsquo; int\u00e9rieur <code>withSelect<\/code>, nous pouvons utiliser <code>select('core\/editor').getEditedPostAttribute('meta')<\/code>pour r\u00e9cup\u00e9rer la m\u00e9ta du message actuel.<\/p>\n<p>D&rsquo;autre part, <code>[withDispatch](https:\/\/developer.wordpress.org\/block-editor\/packages\/packages-data\/#withDispatch)<\/code>est un composant d&rsquo;ordre sup\u00e9rieur qui peut effectuer des actions. Dans notre cas, nous souhaitons mettre \u00e0 jour la m\u00e9ta de la publication lorsque le param\u00e8tre de champ correspondant est modifi\u00e9 dans notre barre lat\u00e9rale. \u00c0 l&rsquo;int\u00e9rieur de ce composant, nous utilisons <code>dispatch('core\/editor').editPost()<\/code>pour informer WordPress d&rsquo;envoyer une action. \u00c0 l&rsquo;int\u00e9rieur de l&rsquo;objet que nous fournissons, nous disons \u00e0 WordPress que c&rsquo;est la m\u00e9ta que nous voulons mettre \u00e0 jour.<\/p>\n<p>Enfin, nous devons combiner <code>withSelect<\/code>et <code>withDispatch<\/code>avec notre composant qui g\u00e8re le post m\u00e9ta champ (<code>CustomSidebarMetaComponent<\/code>). Pour ce faire, nous utilisons WordPress&rsquo; <code>compose<\/code>du <code>wp.compose<\/code>package. L&rsquo;id\u00e9e est que <code>withSelect<\/code>et <code>withDispatch<\/code>fournit \u00e0 notre <code>CustomSidebarMetaComponent<\/code>composant des accessoires. <code>withSelect<\/code>fournit la valeur de la post meta en tant que prop, et <code>withDispatch<\/code>fournit une fonction que nous pouvons appeler pour mettre \u00e0 jour la valeur en tant que prop. Nous d\u00e9finissons ces accessoires sur notre ToggleField <code>checked<\/code>et <code>onChange<\/code>, en cons\u00e9quence.<\/p>\n<p>C&rsquo;est beaucoup d&rsquo;explications. Regardons le code r\u00e9el\u00a0:<\/p>\n<pre><code>...\nconst { compose } = wp.compose;\nconst { withDispatch, withSelect } = wp.data;\n\u00a0\nconst CustomSidebarMetaComponent = (props) =&gt; {\n    return(\n        &lt;ToggleControl\n            label={__('My custom post meta', 'awp')}\n            checked={props.customPostMetaValue}\n            onChange={props.setCustomPostMeta}\n        \/&gt;\n    );\n}\n\u00a0\nconst CustomSidebarMeta = compose([\n    withSelect(select =&gt; {\n        return { customPostMetaValue: select('core\/editor').getEditedPostAttribute('meta')['awp_my_custom_meta'] }\n    }),\n    withDispatch(dispatch =&gt; {\n        return { \n            setCustomPostMeta: function(value) {\n                dispatch('core\/editor').editPost({ meta: { awp_my_custom_meta: value } });\n            }\n        }\n    })\n])(CustomSidebarMetaComponent);\n\u00a0\nconst CustomSidebarComponent = () =&gt; {\n    return(\n        ...\n        &lt;PanelBody\n            title={__('This is a panel section', 'awp')}\n            initialOpen={true}\n        &gt;\n            &lt;PanelRow&gt;\n                &lt;CustomSidebarMeta \/&gt;\n            &lt;\/PanelRow&gt;\n        &lt;\/PanelBody&gt;\n        ...<\/code><\/pre>\n<p>Commen\u00e7ons par le d\u00e9but. Qui est en bas. \u00c0 la ligne, <code>#36<\/code>nous changeons le composant que nous rendons dans notre barre lat\u00e9rale pour le composant que nous avons cr\u00e9\u00e9 avec <code>compose<\/code>(\u00e0 la ligne <code>#15<\/code>). Le <code>CustomSidebarMeta<\/code>composant combinera les composants <code>withSelect<\/code>et <code>withDispatch<\/code>et renverra le <code>CustomSidebarMetaComponent<\/code>.<\/p>\n<p>Le <code>CustomSidebarMetaComponent<\/code>aura acc\u00e8s \u00e0 l&rsquo; <code>customPostMetaValue<\/code>accessoire de <code>withSelect<\/code>, et \u00e0 l&rsquo; <code>setCustomPostMeta<\/code>accessoire de <code>withDispatch<\/code>Ces deux nous nous utilisons pour les accessoires <code>checked<\/code>et dans le .<code>onChange``ToggleField<\/code><\/p>\n<p>Notez qu&rsquo;en ligne, <code>#5<\/code>nous ajoutons des <code>props<\/code>param\u00e8tres aux composants pour rendre les accessoires accessibles dans le composant.<\/p>\n<h2>Conclusion et derniers mots<\/h2>\n<p>J&rsquo;esp\u00e8re que ce tutoriel vous a \u00e9t\u00e9 utile. C&rsquo;est ce que j&rsquo;ai r\u00e9ussi \u00e0 comprendre sur le sujet au cours de nombreux essais et erreurs. Il n&rsquo;y a pratiquement aucune documentation sur ce sujet pour le moment. J&rsquo;ai toujours du mal avec cela, en particulier lorsqu&rsquo;il s&rsquo;agit de g\u00e9rer efficacement plusieurs post-m\u00e9ta. Si je parviens \u00e0 apprendre quelques bonnes astuces, je mettrai \u00e0 jour ce tutoriel \u00e0 coup s\u00fbr!<\/p>\n<p>Esp\u00e9rons qu&rsquo;en suivant ce didacticiel, vous devriez avoir un code qui ajoute avec succ\u00e8s une nouvelle barre lat\u00e9rale personnalis\u00e9e \u00e0 l&rsquo;\u00e9diteur WordPress Gutenberg, et, esp\u00e9rons-le, avec du contenu et des param\u00e8tres significatifs. Voici le code final pour la barre lat\u00e9rale personnalis\u00e9e avec le champ post meta.<\/p>\n<pre><code>const { registerPlugin } = wp.plugins;\nconst { __ } = wp.i18n;\nconst { Fragment } = wp.element;\nconst { PluginSidebarMoreMenuItem, PluginSidebar } = wp.editPost;\nconst { PanelBody, PanelRow, ToggleControl } = wp.components;\nconst { compose } = wp.compose;\nconst { withDispatch, withSelect } = wp.data;\n\u00a0\nconst CustomSidebarMetaComponent = (props) =&gt; {\n    return(\n        &lt;ToggleControl\n            label={__('My custom post meta', 'awp')}\n            checked={props.customPostMetaValue}\n            onChange={props.setCustomPostMeta}\n        \/&gt;\n    );\n}\n\u00a0\nconst CustomSidebarMeta = compose([\n    withSelect(select =&gt; {\n        return { customPostMetaValue: select('core\/editor').getEditedPostAttribute('meta')['awp_my_custom_meta'] }\n    }),\n    withDispatch(dispatch =&gt; {\n        return { \n            setCustomPostMeta: function(value) {\n                dispatch('core\/editor').editPost({ meta: { awp_my_custom_meta: value } });\n            }\n        }\n    })\n])(CustomSidebarMetaComponent);\n\u00a0\nconst CustomSidebarComponent = () =&gt; {\n    return(\n        &lt;Fragment&gt;\n            &lt;PluginSidebarMoreMenuItem \n                target='awp-custom-sidebar'\n                icon='carrot'\n            &gt;{__('My Custom sidebar', 'awp')}&lt;\/PluginSidebarMoreMenuItem&gt;\n            &lt;PluginSidebar \n                name=\"awp-custom-sidebar\" \n                title={__('My Custom sidebar', 'awp')}\n            &gt;                \n                &lt;PanelBody\n                    title={__('This is a panel section', 'awp')}\n                    initialOpen={true}\n                &gt;\n                    &lt;PanelRow&gt;\n                        &lt;CustomSidebarMeta \/&gt;\n                    &lt;\/PanelRow&gt;\n                &lt;\/PanelBody&gt;\n                &lt;PanelBody\n                    title={__('Another section', 'awp')}\n                    initialOpen={false}\n                &gt;\n                    &lt;PanelRow&gt;\n                        This is a collapsed section by default.\n                    &lt;\/PanelRow&gt;\n                &lt;\/PanelBody&gt;\n            &lt;\/PluginSidebar&gt;\n        &lt;\/Fragment&gt;\n    );\n}\n\u00a0\nregisterPlugin('awp-customsidebar', {\n    render: CustomSidebarComponent,\n    icon: 'carrot'\n});<\/code><\/pre>\n<pre><code>add_action('enqueue_block_editor_assets', function() {\n    wp_enqueue_script('awp-sidebar-plugin', get_stylesheet_directory_uri(). '\/assets\/js\/sidebar-plugin.js', ['wp-plugins', 'wp-edit-post']);\n});\n\u00a0\nadd_action('init', function() {\n    register_meta('post', 'awp_my_custom_meta', [\n        'show_in_rest' =&gt; true,\n        'single' =&gt; true,\n        'type' =&gt; 'boolean'\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>Un tutoriel sur la fa\u00e7on d&rsquo;ajouter une barre lat\u00e9rale personnalis\u00e9e \u00e0 l&rsquo;inspecteur dans WordPress Gutenberg. \u00c0 l&rsquo;int\u00e9rieur, nous allons impl\u00e9menter un champ connect\u00e9 \u00e0 une m\u00e9ta post.<\/p>\n","protected":false},"author":1,"featured_media":223619,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,893,717,717,936,936,1110,811,811,841,841,862,862],"tags":[1167],"class_list":{"0":"post-234244","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-code-2","9":"category-developpeur","11":"category-gutenberg-3","13":"category-n-a","14":"category-plugins-2","16":"category-tutoriels","18":"category-wordpress-3","20":"tag-affiai-fr"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234244","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=234244"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234244\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/223619"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=234244"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=234244"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=234244"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}