Як скасувати підтримку блоків Гутенберга
Однією з найпоширеніших проблем із оновленням теми чи плагіна за допомогою блоків Gutenberg є те, що внесення змін до коду блоку порушить усі наявні публікації, які використовують цей блок. На щастя, WordPress пропонує рішення; спосіб відмови від підтримки блоків. У цій публікації ми розглянемо, як це зробити.
Якщо ви раніше працювали з розробкою блоків, то, ймовірно, знайомі з цією помилкою блоку, коли ви додали блок, а потім змінили save
функцію.
Це відбувається тому, що WordPress порівнює збережений блок у базі даних із поточним кодом у save
функції у вашому блоці, і вони не збігаються. WordPress не в змозі виправити різницю. У більшості випадків ви можете натиснути три крапки на блоці та вибрати «Спроба відновлення блоку». Якщо зміни, внесені до save
функції, були незначними (наприклад, зміна класу), WordPress може відновити блок. У найгіршому випадку ви d потрібно натиснути «Перетворити на HTML», і ви втратите edit
функціональність свого блоку. Очевидно, ми не можемо очікувати, що користувачі нашого коду блоку вручну знайдуть усі дописи за допомогою цього блоку та виконають ці дії для кожного.
Тож перш ніж оновлювати save
функцію, ми додамо код, який повідомить WordPress, як обробляти старий вміст, який було збережено за допомогою старої save
функції.
Давайте розберемося з кодом!
Насправді все досить просто. Коротше кажучи, що нам потрібно зробити: додати deprecated
властивість до registerBlockType()
виклику функції. Ця властивість очікує масив. Це означає, що ви можете застаріти блок кілька разів, надаючи кілька записів у масиві. Кожна амортизація визначається як об’єкт, що має повну attributes
властивість і (стару) save
функцію.
Іншими словами, ви визначаєте deprecated
властивість як масив, а потім копіюєте в нього свій блок attributes
і save
функцію. Вам потрібно буде включити атрибути, навіть якщо ви нічого не змінюєте в них під час оновлення. Вам не потрібно включати edit
функцію в амортизацію.
Розглянемо це на більш практичному прикладі.
Припустімо, що наш блоковий код виглядає приблизно так. Функцію edit
виключено, оскільки нам не потрібно мати справу з нею під час амортизації.
Тоді припустімо, що ми хочемо внести зміни в обидва атрибути та зберегти існуючі блоки та уникнути їх пошкодження. Ми додаємо deprecated
властивість і копіюємо в нього цілий attributes
і save
як елемент масиву. Після цього ми можемо вносити будь-які зміни до attributes
та/або save
функції.
Зібравши цей код, ви можете знайти наявну публікацію, використовуючи старий код блоку, і ви не отримаєте зламаного коду!
WordPress визначить, що блок використовує наш застарілий код, і завантажить вміст за допомогою застарілого save
коду. Щойно ви внесете зміни в блок і оновите публікацію, блок буде збережено за допомогою нової save
функції.
Поглиблена амортизація та подальше читання
Наведений вище приклад коду є найосновнішою формою амортизації. WordPress підтримує більше функціональних можливостей, таких як включення migrate
та supports
навіть призначення констант (номерів версії) вашому застарілому коду. Перегляньте документацію WordPress про амортизацію блоку.