{"id":233930,"date":"2023-02-25T14:49:00","date_gmt":"2023-02-25T11:49:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233930"},"modified":"2022-11-11T13:14:34","modified_gmt":"2022-11-11T10:14:34","slug":"como-depreciar-os-blocos-do-gutenberg","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/como-depreciar-os-blocos-do-gutenberg\/","title":{"rendered":"Como depreciar os blocos do Gutenberg"},"content":{"rendered":"\n<p>Um dos problemas mais comuns com a atualiza\u00e7\u00e3o de um tema ou plugin com blocos do Gutenberg \u00e9 que fazer altera\u00e7\u00f5es no c\u00f3digo do bloco quebrar\u00e1 todas as postagens existentes usando esse bloco. Felizmente o WordPress oferece uma solu\u00e7\u00e3o; uma maneira de depreciar blocos. Neste post veremos como fazer isso.<\/p>\n<p>Se voc\u00ea j\u00e1 trabalhou com desenvolvimento de blocos antes, provavelmente est\u00e1 familiarizado com esse erro de bloco quando adiciona um bloco e depois altera a <code>save<\/code>fun\u00e7\u00e3o.<\/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=\"Como depreciar os blocos do Gutenberg\" ><\/a><\/p>\n<p>Isso acontece porque o WordPress compara o bloco salvo no banco de dados com o c\u00f3digo atual na <code>save<\/code>fun\u00e7\u00e3o do seu bloco e eles n\u00e3o correspondem. O WordPress n\u00e3o \u00e9 capaz de corrigir a diferen\u00e7a. Na maioria dos casos, voc\u00ea pode clicar nos tr\u00eas pontos do bloco e escolher &#8220;Tentativa de recupera\u00e7\u00e3o do bloco&quot;. Se as altera\u00e7\u00f5es feitas na <code>save<\/code>fun\u00e7\u00e3o foram pequenas (por exemplo, uma mudan\u00e7a de classe), o WordPress \u00e9 capaz de restaurar o bloco. d precisar clicar em &#8220;Converter para HTML&#8221; e voc\u00ea perder\u00e1 a <code>edit<\/code>funcionalidade do seu bloco. Obviamente n\u00e3o podemos esperar que os usu\u00e1rios do nosso c\u00f3digo de bloco encontrem manualmente todos os posts usando este bloco e executem estes passos para cada um.<\/p>\n<p>Portanto, antes de fazer atualiza\u00e7\u00f5es na <code>save<\/code>fun\u00e7\u00e3o, adicionaremos algum c\u00f3digo para informar ao WordPress como lidar com o conte\u00fado antigo que foi salvo com a <code>save<\/code>fun\u00e7\u00e3o antiga.<\/p>\n<h2>Vamos ao c\u00f3digo!<\/h2>\n<p>Na verdade \u00e9 bem simples. Em suma, o que precisamos fazer \u00e9; adicione uma <code>deprecated<\/code>propriedade \u00e0 <code>registerBlockType()<\/code>chamada de fun\u00e7\u00e3o. Esta propriedade espera uma matriz. Isso significa que voc\u00ea pode descontinuar um bloco v\u00e1rias vezes, fornecendo v\u00e1rias entradas na matriz. Cada deprecia\u00e7\u00e3o \u00e9 definida como um objeto que cont\u00e9m a <code>attributes<\/code>propriedade completa e a fun\u00e7\u00e3o (antiga) <code>save<\/code>.<\/p>\n<p>Em outras palavras, voc\u00ea define uma <code>deprecated<\/code>propriedade como um array e ent\u00e3o copia seus blocos <code>attributes<\/code>e <code>save<\/code>fun\u00e7\u00f5es nele. Voc\u00ea precisar\u00e1 incluir atributos mesmo que n\u00e3o esteja alterando nada neles na atualiza\u00e7\u00e3o. Voc\u00ea n\u00e3o precisa incluir a <code>edit<\/code>fun\u00e7\u00e3o na deprecia\u00e7\u00e3o.<\/p>\n<pre><code>deprecated: [\n    {\n        attributes: { ... },\n        save: (props) =&gt; { ... }\n    }\n]<\/code><\/pre>\n<p>Vamos fazer isso em um exemplo mais pr\u00e1tico.<\/p>\n<p>Suponha que nosso c\u00f3digo de bloco seja algo assim. A <code>edit<\/code>fun\u00e7\u00e3o \u00e9 exclu\u00edda, pois n\u00e3o precisamos lidar com ela na deprecia\u00e7\u00e3o.<\/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>Ent\u00e3o vamos supor que queremos fazer altera\u00e7\u00f5es em ambos os atributos e salvar e evitar quebrar os blocos existentes. Adicionamos a <code>deprecated<\/code>propriedade e copiamos o elemento inteiro <code>attributes<\/code>e <code>save<\/code>como um elemento de matriz nele. Ent\u00e3o, somos livres para fazer quaisquer altera\u00e7\u00f5es <code>attributes<\/code>e\/ou <code>save<\/code>funcionar.<\/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>Com este c\u00f3digo compilado, voc\u00ea pode encontrar uma postagem existente usando o c\u00f3digo de bloco antigo e n\u00e3o deve obter nenhum c\u00f3digo quebrado!<\/p>\n<p>O WordPress descobrir\u00e1 que o bloco est\u00e1 usando nosso c\u00f3digo obsoleto e carregar\u00e1 o conte\u00fado usando o <code>save<\/code>c\u00f3digo obsoleto. Depois de fazer altera\u00e7\u00f5es no bloco e atualizar a postagem, o bloco ser\u00e1 salvo usando a nova <code>save<\/code>fun\u00e7\u00e3o.<\/p>\n<h2>Deprecia\u00e7\u00e3o mais avan\u00e7ada e leitura adicional<\/h2>\n<p>O exemplo de c\u00f3digo acima \u00e9 a forma mais b\u00e1sica de deprecia\u00e7\u00e3o. O WordPress suporta mais funcionalidades, como incluir <code>migrate<\/code>e <code>supports<\/code>at\u00e9 atribuir constantes (pense em n\u00fameros de vers\u00e3o) ao seu c\u00f3digo obsoleto. D\u00ea uma olhada na <a href=\"https:\/\/developer.wordpress.org\/block-editor\/developers\/block-api\/block-deprecation\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documenta\u00e7\u00e3o do WordPress sobre deprecia\u00e7\u00e3o de blocos<\/a>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fazer altera\u00e7\u00f5es no c\u00f3digo de bloco do Gutenberg quebrar\u00e1 todas as postagens existentes usando esse bloco. Neste post, veremos como descontinuar blocos.<\/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":[898,898,722,722,837,941,941,920,1110,920,816,816,837,846,846,867,867],"tags":[1170],"class_list":["post-233930","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-guia-para-iniciantes","category-gutenberg-8","category-outro","category-n-a","category-plug-ins","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/233930","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=233930"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/233930\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/151740"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=233930"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=233930"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=233930"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}