Как отказаться от блоков Гутенберга
Одна из наиболее распространенных проблем с обновлением темы или плагина с помощью блоков Гутенберга заключается в том, что внесение изменений в код блока приведет к поломке всех существующих сообщений, использующих этот блок. К счастью, 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 об амортизации блоков.