Jednym z najczęstszych problemów z aktualizacją motywu lub wtyczki za pomocą bloków Gutenberga jest to, że wprowadzenie zmian w kodzie bloku spowoduje uszkodzenie wszystkich istniejących postów korzystających z tego bloku. Na szczęście WordPress oferuje rozwiązanie; sposób na deprecjonowanie bloków. W tym poście przyjrzymy się, jak to zrobić.
Jeśli pracowałeś z tworzeniem bloków, zanim prawdopodobnie zapoznałeś się z tym błędem bloku, gdy dodałeś blok, a później zmieniłeś save
funkcję.
Dzieje się tak, ponieważ WordPress porównuje zapisany blok w bazie danych z bieżącym kodem save
funkcji w twoim bloku i nie pasują do siebie. WordPress nie jest w stanie załatać różnicy. W większości przypadków możesz kliknąć trzy kropki na bloku i wybrać „Próba odzyskania bloku". Jeśli zmiany wprowadzone w save
funkcji były niewielkie (np. zmiana klasy), WordPress jest w stanie przywrócić blok. Najgorszy scenariusz d trzeba kliknąć „Konwertuj do HTML”, a utracisz edit
funkcjonalność swojego bloku.Oczywiście nie możemy oczekiwać, że użytkownicy naszego kodu blokowego będą ręcznie znajdować wszystkie posty korzystające z tego bloku i wykonywać te kroki dla każdego z nich.
Dlatego zanim wprowadzimy aktualizacje save
funkcji, dodamy trochę kodu, aby powiedzieć WordPressowi, jak radzić sobie ze starą zawartością, która została zapisana za pomocą starej save
funkcji.
Przejdźmy do kodu!
To całkiem proste. Krótko mówiąc, musimy zrobić; dodać deprecated
właściwość do registerBlockType()
wywołania funkcji. Ta właściwość oczekuje tablicy. Oznacza to, że możesz wielokrotnie deprecjonować blok, podając wiele wpisów w tablicy. Każda amortyzacja jest definiowana jako obiekt posiadający pełną attributes
nieruchomość i (starą) save
funkcję.
Innymi słowy, definiujesz deprecated
właściwość jako tablicę, a następnie kopiujesz do niej swój blok attributes
i save
funkcję. Musisz uwzględnić atrybuty, nawet jeśli nic w nich nie zmieniasz w aktualizacji. Nie musisz uwzględniać edit
funkcji w amortyzacji.
Przejdźmy do tego na bardziej praktycznym przykładzie.
Załóżmy, że nasz kod blokowy wygląda mniej więcej tak. Funkcja edit
jest wykluczona, ponieważ nie musimy się nią zajmować w amortyzacji.
Następnie załóżmy, że chcemy dokonać zmian w obu atrybutach oraz zapisać i uniknąć łamania istniejących bloków. Dodajemy deprecated
właściwość i kopiujemy do niej całość attributes
oraz save
jako element tablicy. Wtedy możemy dokonywać wszelkich zmian w attributes
lub/i save
funkcji.
Po skompilowaniu tego kodu możesz znaleźć istniejący post przy użyciu starego kodu blokowego i nie powinieneś otrzymać zepsutego kodu!
WordPress zorientuje się, że blok używa naszego przestarzałego kodu i ładuje zawartość za pomocą przestarzałego save
kodu. Gdy dokonasz zmian w bloku i zaktualizujesz post, blok zostanie zapisany przy użyciu nowej save
funkcji.
Bardziej zaawansowana amortyzacja i dalsze czytanie
Powyższy przykład kodu jest najbardziej podstawową formą amortyzacji. WordPress obsługuje więcej funkcji, takich jak dołączanie migrate
, supports
a nawet przypisywanie stałych (pomyśl o numerach wersji) do przestarzałego kodu. Zajrzyj do dokumentacji WordPressa dotyczącej amortyzacji blokowej.