Программное копирование/клонирование контента Elementor в новый пост, чтобы его можно было перевести

Я разрабатываю плагин для Polylang, который берет содержимое выбранных сообщений и сохраняет его в XLIFF-файл, который можно отправить в бюро переводов. Когда переведенный XLIFF возвращается, я создаю новые переведенные сообщения и связываю их с функциями Polylang. Polylang работает таким образом, что каждый перевод представляет собой клонированный пост, связанный с их базой данных.

Все прекрасно работает с Classic Editor, Gutenberg и любым компоновщиком страниц, который использует шорткоды для создания post-›post_content.

Однако Elementor, похоже, не работает с шорткодами, а вместо этого использует собственные таблицы базы данных для сохранения контента.

Я могу получить визуализированный контент Elementor из сообщения, но это всего лишь html, и хотя я могу сохранить его в содержимом сообщения, его больше нельзя редактировать с помощью Elementor.

В основном я мог бы попытаться получить контент, используя идентификаторы, которые я получаю с помощью $elementor->documents->get_doc_for_frontend( $post_id )->get_elements_data();, сохранить их как переводимые объекты в XLIFF, но я не понял, как клонировать сообщение Elementor, чтобы были новые идентификаторы, а затем заменить содержимое в этих . Или что-то...

Кто-нибудь знает о существующих реализациях, в которых клонируется страница Elementor и заменяется текстовое содержимое некоторых результирующих страниц?


person Sivustonikkari    schedule 20.04.2021    source источник


Ответы (1)


Все соответствующие данные хранятся в таблице wp_postmeta, содержащей около 10 строк на сообщение.

В поле meta_value из post_id = '$post_id' AND meta_key = '_elementor_data' вы найдете содержимое в формате JSON. Части для перевода, т.е. editor, text, title.

Я надеюсь, что это поможет - пожалуйста, держите меня в курсе дальнейших обновлений.

person Fleks    schedule 20.04.2021
comment
К сожалению, содержимое _elementor_data метаданных содержит ту же информацию, что и $elementor->documents->get_doc_for_frontend( $post_id )->get_elements_data(); Так что это что-то вроде: {"id":"8e7b704","elType":"section","settings":[],"elements":[{"id":"3a49657","elType":"column","settings":{"_column_size":100,"_inline_size":null},"elements":[],"isInner":false}],"isInner":false},{"id":"4776a27","elType":"section","settings":[],"elements":[{"id":"a7400f9","elType":"column","settings"... И фактического содержания там нет. Я копну немного глубже... - person Sivustonikkari; 21.04.2021
comment
А, ладно, я не знал. Таким образом, Elementor полностью игнорирует post_content (я только что удалил его из сообщения), весь контент генерируется из _elementor_data. Для отображения вы можете теоретически удалить все связанные данные из wp_postmeta, кроме _elementor_data и _elementor_edit_mode. - person Fleks; 21.04.2021
comment
Вы можете отобразить данные Elementor, т.е. с помощью jsonformatter.curiousconcept.com - посмотрите здесь editor, text, title это будут части переводить. Возможно, это поможет: developer.mozilla.org/en-US/ документы/Обучение/JavaScript/Объекты/JSON - person Fleks; 21.04.2021