{"id":233906,"date":"2023-02-25T14:45:00","date_gmt":"2023-02-25T11:45:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233906"},"modified":"2022-11-11T13:06:58","modified_gmt":"2022-11-11T10:06:58","slug":"jak-odrzucic-bloki-gutenberga","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/jak-odrzucic-bloki-gutenberga\/","title":{"rendered":"Jak odrzuci\u0107 bloki Gutenberga"},"content":{"rendered":"\n<p>Jednym z najcz\u0119stszych problem\u00f3w z aktualizacj\u0105 motywu lub wtyczki za pomoc\u0105 blok\u00f3w Gutenberga jest to, \u017ce wprowadzenie zmian w kodzie bloku spowoduje uszkodzenie wszystkich istniej\u0105cych post\u00f3w korzystaj\u0105cych z tego bloku. Na szcz\u0119\u015bcie WordPress oferuje rozwi\u0105zanie; spos\u00f3b na deprecjonowanie blok\u00f3w. W tym po\u015bcie przyjrzymy si\u0119, jak to zrobi\u0107.<\/p>\n<p>Je\u015bli pracowa\u0142e\u015b z tworzeniem blok\u00f3w, zanim prawdopodobnie zapozna\u0142e\u015b si\u0119 z tym b\u0142\u0119dem bloku, gdy doda\u0142e\u015b blok, a p\u00f3\u017aniej zmieni\u0142e\u015b <code>save<\/code>funkcj\u0119.<\/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=\"Jak odrzuci\u0107 bloki Gutenberga\" ><\/a><\/p>\n<p>Dzieje si\u0119 tak, poniewa\u017c WordPress por\u00f3wnuje zapisany blok w bazie danych z bie\u017c\u0105cym kodem <code>save<\/code>funkcji w twoim bloku i nie pasuj\u0105 do siebie. WordPress nie jest w stanie za\u0142ata\u0107 r\u00f3\u017cnicy. W wi\u0119kszo\u015bci przypadk\u00f3w mo\u017cesz klikn\u0105\u0107 trzy kropki na bloku i wybra\u0107 \u201ePr\u00f3ba odzyskania bloku&quot;. Je\u015bli zmiany wprowadzone w <code>save<\/code>funkcji by\u0142y niewielkie (np. zmiana klasy), WordPress jest w stanie przywr\u00f3ci\u0107 blok. Najgorszy scenariusz d trzeba klikn\u0105\u0107 \u201eKonwertuj do HTML&#8221;, a utracisz <code>edit<\/code>funkcjonalno\u015b\u0107 swojego bloku.Oczywi\u015bcie nie mo\u017cemy oczekiwa\u0107, \u017ce u\u017cytkownicy naszego kodu blokowego b\u0119d\u0105 r\u0119cznie znajdowa\u0107 wszystkie posty korzystaj\u0105ce z tego bloku i wykonywa\u0107 te kroki dla ka\u017cdego z nich.<\/p>\n<p>Dlatego zanim wprowadzimy aktualizacje <code>save<\/code>funkcji, dodamy troch\u0119 kodu, aby powiedzie\u0107 WordPressowi, jak radzi\u0107 sobie ze star\u0105 zawarto\u015bci\u0105, kt\u00f3ra zosta\u0142a zapisana za pomoc\u0105 starej <code>save<\/code>funkcji.<\/p>\n<h2>Przejd\u017amy do kodu!<\/h2>\n<p>To ca\u0142kiem proste. Kr\u00f3tko m\u00f3wi\u0105c, musimy zrobi\u0107; doda\u0107 <code>deprecated<\/code>w\u0142a\u015bciwo\u015b\u0107 do <code>registerBlockType()<\/code>wywo\u0142ania funkcji. Ta w\u0142a\u015bciwo\u015b\u0107 oczekuje tablicy. Oznacza to, \u017ce mo\u017cesz wielokrotnie deprecjonowa\u0107 blok, podaj\u0105c wiele wpis\u00f3w w tablicy. Ka\u017cda amortyzacja jest definiowana jako obiekt posiadaj\u0105cy pe\u0142n\u0105 <code>attributes<\/code>nieruchomo\u015b\u0107 i (star\u0105) <code>save<\/code>funkcj\u0119.<\/p>\n<p>Innymi s\u0142owy, definiujesz <code>deprecated<\/code>w\u0142a\u015bciwo\u015b\u0107 jako tablic\u0119, a nast\u0119pnie kopiujesz do niej sw\u00f3j blok <code>attributes<\/code>i <code>save<\/code>funkcj\u0119. Musisz uwzgl\u0119dni\u0107 atrybuty, nawet je\u015bli nic w nich nie zmieniasz w aktualizacji. Nie musisz uwzgl\u0119dnia\u0107 <code>edit<\/code>funkcji w amortyzacji.<\/p>\n<pre><code>deprecated: [\n    {\n        attributes: { ... },\n        save: (props) =&gt; { ... }\n    }\n]<\/code><\/pre>\n<p>Przejd\u017amy do tego na bardziej praktycznym przyk\u0142adzie.<\/p>\n<p>Za\u0142\u00f3\u017cmy, \u017ce nasz kod blokowy wygl\u0105da mniej wi\u0119cej tak. Funkcja <code>edit<\/code>jest wykluczona, poniewa\u017c nie musimy si\u0119 ni\u0105 zajmowa\u0107 w amortyzacji.<\/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>Nast\u0119pnie za\u0142\u00f3\u017cmy, \u017ce chcemy dokona\u0107 zmian w obu atrybutach oraz zapisa\u0107 i unikn\u0105\u0107 \u0142amania istniej\u0105cych blok\u00f3w. Dodajemy <code>deprecated<\/code>w\u0142a\u015bciwo\u015b\u0107 i kopiujemy do niej ca\u0142o\u015b\u0107 <code>attributes<\/code>oraz <code>save<\/code>jako element tablicy. Wtedy mo\u017cemy dokonywa\u0107 wszelkich zmian w <code>attributes<\/code>lub\/i <code>save<\/code>funkcji.<\/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>Po skompilowaniu tego kodu mo\u017cesz znale\u017a\u0107 istniej\u0105cy post przy u\u017cyciu starego kodu blokowego i nie powiniene\u015b otrzyma\u0107 zepsutego kodu!<\/p>\n<p>WordPress zorientuje si\u0119, \u017ce blok u\u017cywa naszego przestarza\u0142ego kodu i \u0142aduje zawarto\u015b\u0107 za pomoc\u0105 przestarza\u0142ego <code>save<\/code>kodu. Gdy dokonasz zmian w bloku i zaktualizujesz post, blok zostanie zapisany przy u\u017cyciu nowej <code>save<\/code>funkcji.<\/p>\n<h2>Bardziej zaawansowana amortyzacja i dalsze czytanie<\/h2>\n<p>Powy\u017cszy przyk\u0142ad kodu jest najbardziej podstawow\u0105 form\u0105 amortyzacji. WordPress obs\u0142uguje wi\u0119cej funkcji, takich jak do\u0142\u0105czanie <code>migrate<\/code>, <code>supports<\/code>a nawet przypisywanie sta\u0142ych (pomy\u015bl o numerach wersji) do przestarza\u0142ego kodu. Zajrzyj do <a href=\"https:\/\/developer.wordpress.org\/block-editor\/developers\/block-api\/block-deprecation\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dokumentacji WordPressa dotycz\u0105cej amortyzacji blokowej<\/a>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wprowadzanie zmian w kodzie blokowym Gutenberga spowoduje przerwanie wszystkich istniej\u0105cych post\u00f3w korzystaj\u0105cych z tego bloku. W tym po\u015bcie przyjrzymy si\u0119, jak deprecjonowa\u0107 bloki.<\/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":[897,721,721,940,940,919,897,919,1110,815,836,836,845,845,866,866,815],"tags":[1169],"class_list":["post-233906","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kod","category-deweloper","category-gutenberg-7","category-inny","category-n-a","category-wtyczki","category-przewodnik-dla-poczatkujacych","category-samouczki","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233906","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=233906"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233906\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/151740"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=233906"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=233906"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=233906"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}