{"id":234268,"date":"2023-02-25T14:45:00","date_gmt":"2023-02-25T11:45:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234268"},"modified":"2022-11-12T02:57:56","modified_gmt":"2022-11-11T23:57:56","slug":"comment-deprecier-les-blocs-gutenberg","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/comment-deprecier-les-blocs-gutenberg\/","title":{"rendered":"Comment d\u00e9pr\u00e9cier les blocs Gutenberg"},"content":{"rendered":"\n<p>L&rsquo;un des probl\u00e8mes les plus courants li\u00e9s \u00e0 la mise \u00e0 jour d&rsquo;un th\u00e8me ou d&rsquo;un plugin avec des blocs Gutenberg est que la modification du code de bloc cassera toutes les publications existantes utilisant ce bloc. Heureusement, WordPress propose une solution ; un moyen de d\u00e9pr\u00e9cier les blocs. Dans cet article, nous verrons comment proc\u00e9der.<\/p>\n<p>Si vous avez d\u00e9j\u00e0 travaill\u00e9 avec le d\u00e9veloppement de blocs, vous connaissez probablement cette erreur de bloc lorsque vous avez ajout\u00e9 un bloc, puis modifi\u00e9 la <code>save<\/code>fonction ult\u00e9rieurement.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151739-61e4cecf0099f.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-151739-61e4cecf0099f.png\" alt=\"Comment d\u00e9pr\u00e9cier les blocs Gutenberg\" ><\/a><\/p>\n<p>Cela se produit parce que WordPress compare le bloc enregistr\u00e9 dans la base de donn\u00e9es avec le code actuel dans la <code>save<\/code>fonction de votre bloc, et ils ne correspondent pas. WordPress n&rsquo;est pas en mesure de combler la diff\u00e9rence. Dans la plupart des cas, vous pouvez cliquer sur les trois points du bloc et choisir \u00abTenter la r\u00e9cup\u00e9ration du bloc \u00bb. Si les modifications apport\u00e9es \u00e0 la <code>save<\/code>fonction \u00e9taient minimes (par exemple, un changement de classe), WordPress est en mesure de restaurer le bloc. Dans le pire des cas, vous d besoin de cliquer sur &quot;Convertir en HTML&quot; et vous perdrez la <code>edit<\/code>fonctionnalit\u00e9 de votre bloc. \u00c9videmment, nous ne pouvons pas nous attendre \u00e0 ce que les utilisateurs de notre code de bloc trouvent manuellement tous les messages utilisant ce bloc et effectuent ces \u00e9tapes pour chacun.<\/p>\n<p>Donc, avant de mettre \u00e0 jour la <code>save<\/code>fonction, nous ajouterons du code pour indiquer \u00e0 WordPress comment g\u00e9rer l&rsquo;ancien contenu qui a \u00e9t\u00e9 enregistr\u00e9 avec l&rsquo;ancienne <code>save<\/code>fonction.<\/p>\n<h2>Entrons dans le code !<\/h2>\n<p>C&rsquo;est en fait assez simple. En bref, ce que nous devons faire est; ajouter une <code>deprecated<\/code>propri\u00e9t\u00e9 \u00e0 l&rsquo; <code>registerBlockType()<\/code>appel de fonction. Cette propri\u00e9t\u00e9 attend un tableau. Cela signifie que vous pouvez d\u00e9pr\u00e9cier un bloc plusieurs fois, en fournissant plusieurs entr\u00e9es dans le tableau. Chaque amortissement est d\u00e9fini comme un objet d\u00e9tenant la <code>attributes<\/code>propri\u00e9t\u00e9 compl\u00e8te et la (ancienne) <code>save<\/code>fonction.<\/p>\n<p>En d&rsquo;autres termes, vous d\u00e9finissez une <code>deprecated<\/code>propri\u00e9t\u00e9 comme un tableau, puis vous y copiez votre bloc <code>attributes<\/code>et votre <code>save<\/code>fonction. Vous devrez inclure des attributs m\u00eame si vous n&rsquo;y modifiez rien dans la mise \u00e0 jour. Vous n&rsquo;avez pas besoin d&rsquo;inclure la <code>edit<\/code>fonction dans l&rsquo;amortissement.<\/p>\n<pre><code>deprecated: [\n    {\n        attributes: { ... },\n        save: (props) =&gt; { ... }\n    }\n]<\/code><\/pre>\n<p>Allons-y dans un exemple plus pratique.<\/p>\n<p>Supposons que notre code de bloc ressemble \u00e0 ceci. La <code>edit<\/code>fonction est exclue car nous n&rsquo;avons pas besoin de la traiter dans l&rsquo;amortissement.<\/p>\n<pre><code>const { __ } = wp.i18n;\nconst { registerBlockType } = wp.blocks;\nconst { RichText } = wp.blockEditor;\n\u00a0\nimport edit from '.\/edit';\n\u00a0\nregisterBlockType( 'awp\/deprecated-block-example', {\n    title: __( 'Example of deprecating a block' ),\n    icon: 'format-aside',\n    category: 'widgets',\n    attributes: {\n        alignment: {\n            type: 'string',\n            default: 'center'\n        },\n        exampleString: {\n            type: 'string'\n        },\n    },\n    edit,\n    save: (props) =&gt; { \n        const { exampleString } = props;\n        return(\n            &lt;div className=\"deprecated-block-example\"&gt;\n                &lt;RichText.Content value={ exampleString } \/&gt;\n            &lt;\/div&gt;\n        );\n    }\n});<\/code><\/pre>\n<p>Supposons ensuite que nous voulions apporter des modifications aux deux attributs et enregistrer et \u00e9viter de casser les blocs existants. Nous ajoutons la <code>deprecated<\/code>propri\u00e9t\u00e9 et copions le tout <code>attributes<\/code>et <code>save<\/code>en tant qu&rsquo;\u00e9l\u00e9ment de tableau dans celle-ci. Ensuite, nous sommes libres d&rsquo;apporter des modifications \u00e0 <code>attributes<\/code>ou\/et \u00e0 <code>save<\/code>la fonction.<\/p>\n<pre><code>const { __ } = wp.i18n;\nconst { registerBlockType } = wp.blocks;\nconst { RichText } = wp.blockEditor;\n\u00a0\nimport edit from '.\/edit';\n\u00a0\nregisterBlockType( 'awp\/deprecated-block-example', {\n    title: __( 'Example of deprecating a block' ),\n    icon: 'format-aside',\n    category: 'widgets',\n    attributes: {\n        alignment: {\n            type: 'string',\n            default: 'center'\n        },\n        exampleString: {\n            type: 'string'\n        },\n        newThing: {\n            type: 'string'\n        },\n    },\n    edit,\n    save: (props) =&gt; { \n        const { exampleString, newThing } = props;\n        return(\n            &lt;div className=\"deprecated-block-example\"&gt;\n                &lt;RichText.Content value={ exampleString } \/&gt;\n                &lt;div className=\"new-content\"&gt;\n                    &lt;RichText.Content value={ newThing } \/&gt;\n                &lt;\/div&gt;\n            &lt;\/div&gt;\n        );\n    },\n    deprecated: [\n        {\n            attributes: {\n                alignment: {\n                    type: 'string',\n                    default: 'center'\n                },\n                exampleString: {\n                    type: 'string'\n                },\n            },\n            save: (props) =&gt; { \n                const { exampleString } = props;\n                return(\n                    &lt;div className=\"deprecated-block-example\"&gt;\n                        &lt;RichText.Content value={ exampleString } \/&gt;\n                    &lt;\/div&gt;\n                );\n            },\n        }\n    ]\n});<\/code><\/pre>\n<p>Avec ce code compil\u00e9, vous pouvez rechercher un article existant en utilisant l&rsquo;ancien code de bloc, et vous ne devriez pas obtenir de code cass\u00e9\u00a0!<\/p>\n<p>WordPress d\u00e9terminera que le bloc utilise notre code obsol\u00e8te et chargera le contenu \u00e0 l&rsquo;aide du <code>save<\/code>code obsol\u00e8te. Une fois que vous avez apport\u00e9 des modifications au bloc et mis \u00e0 jour la publication, le bloc sera enregistr\u00e9 \u00e0 l&rsquo;aide de la nouvelle <code>save<\/code>fonction.<\/p>\n<h2>Amortissement plus avanc\u00e9 et lecture plus approfondie<\/h2>\n<p>L&rsquo;exemple de code ci-dessus est la forme la plus basique d&rsquo;amortissement. WordPress prend en charge davantage de fonctionnalit\u00e9s, telles que l&rsquo;inclusion de <code>migrate<\/code>, <code>supports<\/code>et m\u00eame l&rsquo;attribution de constantes (pensez aux num\u00e9ros de version) \u00e0 votre code obsol\u00e8te. Jetez un \u0153il \u00e0 <a href=\"https:\/\/developer.wordpress.org\/block-editor\/developers\/block-api\/block-deprecation\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la documentation de WordPress sur la d\u00e9pr\u00e9ciation des blocs<\/a>.<\/p>\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>Apporter des modifications au code du bloc Gutenberg cassera tous les messages existants utilisant ce bloc. Dans cet article, nous verrons comment rendre obsol\u00e8tes les blocs.<\/p>\n","protected":false},"author":1,"featured_media":151740,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[915,893,893,717,717,832,936,936,915,1110,811,811,832,841,841,862,862],"tags":[1167],"class_list":["post-234268","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autre","category-code-2","category-developpeur","category-guide-pour-les-debutants","category-gutenberg-3","category-n-a","category-plugins-2","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234268","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=234268"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234268\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/151740"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=234268"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=234268"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=234268"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}