Запуск Wordpress Gutenberg Convert to Blocks программно

У меня есть несколько роботов, написанных на Node.js, для автоматической генерации HTML-содержимого и размещения его на нескольких сайтах Wordpress с помощью REST API. Недавно был официально выпущен Wordpress 5.0, и Гутенберг стал редактором по умолчанию. Все старые сообщения, а также сообщения, созданные роботами, будут заключены в один «классический» блок.

Как уже известно большинству из нас, необходимо добавить дополнительную разметку, чтобы преобразовать элементы HTML в блоки, и была кнопка «Преобразовать в блоки», чтобы преобразовать их в блоки в пользовательском интерфейсе Gutenberg. Есть ли какой-нибудь удобный способ (скажем, с использованием встроенных функций) программно выполнять те же действия, что и «Преобразование в блоки», или мы должны обернуть эти разметки, связанные с Гутенбергом, одну за другой? Любая помощь должна быть оценена


person kychung    schedule 08.12.2018    source источник


Ответы (1)


Может быть, это немного поздно, но если кто-то все еще ищет решение, вот как это сделать.

Этот код предполагает, что ваш классический блок является первым:

var block = wp.data
      .select("core/editor")
      .getBlocks()[0];

wp.data.dispatch( 'core/editor' ).replaceBlocks(block.clientId, wp.blocks.rawHandler( 
  { HTML: wp.blocks.getBlockContent( block ) }
));

Если вы хотите сделать это для всех классических блоков, просто переберите все блоки и найдите имя блока core/freeform, чтобы преобразовать его следующим образом:

wp.data.select("core/editor").getBlocks().forEach(function(block, blockIndex){
  if (block.name === "core/freeform"){
    wp.data.dispatch( 'core/editor' ).replaceBlocks(block.clientId, wp.blocks.rawHandler( 
      { HTML: wp.blocks.getBlockContent( block ) }
    ));    
  }
})
person Akshay Raje    schedule 23.02.2019
comment
Есть ли пакет npm, который я могу использовать для доступа к wp, вероятно, я бы импортировал его из пакета npm, верно? - person Max Carroll; 13.07.2020
comment
@MaxCarroll Существует несколько пакетов WordPress (github.com/WordPress/gutenberg/tree/master/ пакеты), которые используют глобальный wp, но в зависимости от того, как вы это делаете, они могут вам не понадобиться. этот код, похоже, использует пакеты 'wp-blocks', 'wp-editor', которые скомпилированы в стандартную установку wordpress. developer.wordpress.org/block-editor/packages - person Will; 04.12.2020
comment
Похоже, это должно быть именно то, что я хочу, но я не могу заставить его работать (даже после обновления ядра / редактора до «ядра / редактора блоков»). getBlocks всегда возвращает мне пустой массив, независимо от того, сколько блоков присутствует в текущем посте. Не уверен, что делаю не так. Вызов getBlocks слишком рано? Я также пробовал обернуть его в wp.domReady (function () {}; - person MadtownLems; 26.05.2021