{"id":233861,"date":"2023-02-25T15:13:00","date_gmt":"2023-02-25T12:13:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233861"},"modified":"2022-11-11T12:51:08","modified_gmt":"2022-11-11T09:51:08","slug":"como-dejar-obsoletos-los-bloques-de-gutenberg","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/como-dejar-obsoletos-los-bloques-de-gutenberg\/","title":{"rendered":"C\u00f3mo dejar obsoletos los bloques de Gutenberg"},"content":{"rendered":"\n<p>Uno de los problemas m\u00e1s comunes con la actualizaci\u00f3n de un tema o complemento con bloques de Gutenberg es que hacer cambios en el c\u00f3digo del bloque romper\u00e1 todas las publicaciones existentes que usan ese bloque. Afortunadamente, WordPress ofrece una soluci\u00f3n; una forma de desaprobar los bloques. En este post veremos c\u00f3mo hacerlo.<\/p>\n<p>Si ha trabajado con el desarrollo de bloques antes, probablemente est\u00e9 familiarizado con este error de bloque cuando agreg\u00f3 un bloque y luego cambi\u00f3 la <code>save<\/code>funci\u00f3n.<\/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=\"C\u00f3mo dejar obsoletos los bloques de Gutenberg\" ><\/a><\/p>\n<p>Esto sucede porque WordPress compara el bloque guardado en la base de datos con el c\u00f3digo actual en la <code>save<\/code>funci\u00f3n de su bloque y no coinciden. WordPress no puede reparar la diferencia. En la mayor\u00eda de los casos, puede hacer clic en los tres puntos del bloque y elegir &quot;Intentar recuperaci\u00f3n del bloque&quot;. Si los cambios realizados en la <code>save<\/code>funci\u00f3n fueron peque\u00f1os (por ejemplo, un cambio de clase), WordPress puede restaurar el bloque. En el peor de los casos, usted Necesito hacer clic en &quot;Convertir a HTML&quot; y perder\u00e1 la <code>edit<\/code>funcionalidad de su bloque. Obviamente, no podemos esperar que los usuarios de nuestro c\u00f3digo de bloque encuentren manualmente todas las publicaciones que usan este bloque y realicen estos pasos para cada una.<\/p>\n<p>Entonces, antes de realizar actualizaciones a la <code>save<\/code>funci\u00f3n, agregaremos un c\u00f3digo para decirle a WordPress c\u00f3mo manejar el contenido antiguo que se guard\u00f3 con la <code>save<\/code>funci\u00f3n anterior.<\/p>\n<h2>\u00a1Entremos en el c\u00f3digo!<\/h2>\n<p>En realidad es bastante simple. En resumen lo que tenemos que hacer es; agregue una <code>deprecated<\/code>propiedad a la <code>registerBlockType()<\/code>llamada de funci\u00f3n. Esta propiedad espera una matriz. Eso significa que puede desaprobar un bloque varias veces, proporcionando m\u00faltiples entradas en la matriz. Cada depreciaci\u00f3n se define como un objeto que contiene la <code>attributes<\/code>propiedad completa y la funci\u00f3n (antigua) <code>save<\/code>.<\/p>\n<p>En otras palabras, define una <code>deprecated<\/code>propiedad como una matriz y luego copia su bloque <code>attributes<\/code>y <code>save<\/code>funci\u00f3n en ella. Deber\u00e1 incluir atributos aunque no cambie nada en ellos en la actualizaci\u00f3n. No necesita incluir la <code>edit<\/code>funci\u00f3n en la depreciaci\u00f3n.<\/p>\n<pre><code>deprecated: [\n    {\n        attributes: { ... },\n        save: (props) =&gt; { ... }\n    }\n]<\/code><\/pre>\n<p>Veamos esto en un ejemplo m\u00e1s pr\u00e1ctico.<\/p>\n<p>Supongamos que nuestro c\u00f3digo de bloque se parece a esto. La <code>edit<\/code>funci\u00f3n se excluye porque no necesitamos tratarla en la depreciaci\u00f3n.<\/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>Entonces supongamos que queremos hacer cambios en ambos atributos y guardar y evitar romper bloques existentes. Agregamos la <code>deprecated<\/code>propiedad y copiamos todo <code>attributes<\/code>y <code>save<\/code>como un elemento de matriz en ella. Entonces somos libres de hacer cualquier cambio en la funci\u00f3n <code>attributes<\/code>or\/and <code>save<\/code>.<\/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>Con este c\u00f3digo compilado, puede ir a buscar una publicaci\u00f3n existente utilizando el c\u00f3digo de bloque anterior, \u00a1y no deber\u00eda obtener ning\u00fan c\u00f3digo roto!<\/p>\n<p>WordPress se dar\u00e1 cuenta de que el bloque est\u00e1 usando nuestro c\u00f3digo obsoleto y cargar\u00e1 el contenido usando el <code>save<\/code>c\u00f3digo obsoleto. Una vez que realice cambios en el bloque y actualice la publicaci\u00f3n, el bloque se guardar\u00e1 con la nueva <code>save<\/code>funci\u00f3n.<\/p>\n<h2>Depreciaci\u00f3n m\u00e1s avanzada y lecturas adicionales<\/h2>\n<p>El ejemplo de c\u00f3digo anterior es la forma m\u00e1s b\u00e1sica de depreciaci\u00f3n. WordPress admite m\u00e1s funciones, como incluir <code>migrate<\/code>e <code>supports<\/code>incluso asignar constantes (piense en n\u00fameros de versi\u00f3n) a su c\u00f3digo obsoleto. Eche un vistazo a <a href=\"https:\/\/developer.wordpress.org\/block-editor\/developers\/block-api\/block-deprecation\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la documentaci\u00f3n de WordPress sobre la depreciaci\u00f3n de bloques<\/a>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hacer cambios en el c\u00f3digo del bloque de Gutenberg romper\u00e1 todas las publicaciones existentes que usen ese bloque. En esta publicaci\u00f3n, veremos c\u00f3mo desaprobar los bloques.<\/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":[892,892,810,716,716,831,935,935,914,1110,914,810,831,840,840,861,861],"tags":[1172],"class_list":["post-233861","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-complementos","category-desarrollador","category-guia-para-principiantes","category-gutenberg-2","category-otro","category-n-a","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233861","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=233861"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233861\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/151740"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=233861"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=233861"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=233861"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}