27 января 2021, 00:00
 961

Как перенести записи с WordPress на MODX Revolution

Пошаговая инструкция, как перенести записи с WordPress на MODX Revo.
Перенесем контент, теги и сохраним URL структуру.

Если Вы не умеете писать парсеры для импорта и вообще туговато со всем этим, то эта инструкция для Вас.

Что нам нужно:

  1. Sublime Text 3 — текстовый редактор.
  2. Экспортированный файл с записями *.xml из WordPress.
  3. Плагин ImportX для Modx Revo.

Чтобы импортировать успешно и без ошибок все записи из WordPress в Modx Revo с помощью плагина ImportX, нужно сделать текстовый документ под шаблон импорта с такой шапкой:

pagetitle||description||content||publishedon||alias||tv2||richtext||template||

  • pagetitle — Заголовок;
  • description — Описание;
  • content — Содержимое в одну строку прям с HTML кодом;
  • publishedon — Дата публикации, формата: 2020-03-25 16:00:00;
  • alias — URL;
  • tv2 — Дополнительное поле с id = 2, туда мы запишем теги в формате JSON ["Вода", "Огонь"];
  • richtext — Ставим цифру 1, если хотим использовать HTML редактор для записей;
  • template — Указываем цифрой id шаблона для вашей статьи;
  • || — Разделитель, можно любой, но я выбрал две палки, потому что они вряд ли встретятся в записях.

 

Важный момент!

MODX по-умолчанию в БД для полей pagetitle, longtitle установлено значение varchar(191) и поэтому будьте внимательны! При импорте, если ваши заголовки длиннее, то они обрежутся. Поэтому сначала для этого в phpmyadmin измените это значение увеличив число, либо сделав просто тип поля "text".

 

Шаг 1 - Экспортируем записи из WordPress

В админке WP находим Инструменты -> Экспорт -> Записи -> Выбираем раздел -> Скачать файл экспорта.

Экспорт записей из WordPress

Так мы получим файл формата *.xml с записями, с тегами, с комментариями к записям, с датами публикации, с URL адресом - в общем, все данные в одном файле. Но там так же будет еще и куча лишних параметров, от которых нам предстоит очистить этот файл.

 

Шаг 2 - Чистим полученный файл *.xml в редакторе Sublime Text

Нужно удалить лишнее и оставить только нужные строки между тегами <item>...</item> и сами теги, они нам еще пригодятся.

Используя горячие клавиши, логику и смекалку удалим ненужные строки и объединим каждую запись в одну строку. Но для начала выравниваем код, используя технологичность кода и заранее установленную функцию в Sublime Text, жмем правой кнопкой мыши, выбираем HTML/CSS/JS Prettify -> Prettify Code.

Технологичность кода в Sublime Text

Удаляем ненужные строки: жмем ⌘ + F (для Mac) и Ctrl + F (для Win), в строке поиска включаем "регулярные выражения" - это кнопка в левом нижнем углу .* и пишем в поисковую строку: <link>.*</link> точка со звездочкой между тегами значит "найти всю строку вместе с содержимым", но работает это только, если все в одну строку! Далее жмем "Find All" или ALT + Enter (найти все) и удаляем все найденные строки.

Найти все теги с содержимым используя регулярные выражения

Теперь, как удалить теги, где содержимое разбито на несколько строк?

<wp:post_date>
  <![CDATA[2020-03-25 15:30:00]]>
</wp:post_date>

Так же, но сначала нужно объединить все содержимое в одну строку. Для этого находим открывающийся тег <wp:post_date> жмем:

  1. Alt + Enter - Найти все совпадения.
  2. ⌘ + Shift + A - Выделить текст между двумя парными тегами.
  3. ⌘ + J - Объединить выделенные строки.

Таким нехитрым путем чистим документ и оставляем только нужные нам строки с тегами. И получаем примерно такое:

Почти готовый вариант документа для импорта

Дальше простым "Поиск и Замена" чистим лишнее и будем приводить теги в формат JSON в одну строку.

Отключив функцию "регулярные выражения", находим сначала  <![CDATA[ с пробелом и потом это ]]>  заменяем на пустоту.

Удаляем лишние комментарии с пробелами от WP <!-- wp:paragraph --> в контенте, чтоб все было чистенько.

Приводим теги в формат JSON в одну строку.

  1. ⌘ + F в поиск вставляем <category жмем ALT + Enter и ⌘ + Shift + A так мы находим все содержимое между этими тегами.
  2. Один раз нажимаем стрелочку влево на клавиатуре и мигающий курсор встает именно в начало содержимого тега.
  3. ⌘ + Delete и потом TAB чтоб выровнять отступ и пишем вначале тегов "
  4. ⌘ + стрелочка вправо, чтоб курсоры переместились в конец закрывающего тега </category> просто стираем его и пишем ", и жмем ⌘ + J сделав все в одну строку.
  5. Учтите, если тегов много, они будут в одну строку, но с переносом на новую. Чтоб поставить открывающуюся квадратную скобку вначале, выделяем закрывающий тег выше и захватываем на новой строке кавычку рядом с тегом </wp:post_name> " и заменяем везде это на ||["
  6. Далее удалим лишнюю запятую в конце и закроем квадратную скобку. Находим ,</item> и заменяем на ]||1||4|| где 1 - это richtext, а 4 - это id шаблона template.

Получаем примерно вот это:

Промежуточный итог

Дальше все просто, заменить открывающиеся/закрывающиеся теги на наш разделитель || и чтоб каждая "запись/ресурс" была с новой строки. Естественно, удалив лишние теги <item>.

И не забываем в самом верху вставить шапку pagetitle||description||content||publishedon||alias||tv2||richtext||template||

Итого должен получиться вот такой готовый для импорта файл:

Готовый файл для импорта

 

Шаг 3 - Импортируем готовый файл в MODX Revo через плагин ImportX

Сначала в плагине на вкладка "Базовые настройки" указываем id ресурса родителя, куда мы хотим импортировать статьи. Отмечаем галочками то, что вам нужно.

Импорт записей из WordPress в MODX через плагин ImportX

Дальше вставляем в поле "Чистый CSV" наш текст из подготовленного файла или можете просто сохранить файл в формате *.txt и прикрепить, где написано "Загрузить файл CSV". Обязательно не забываем указать разделитель || и жмем "Начать импорт".

Импорт записей из WordPress в MODX через плагин ImportX

Импорт записей из WordPress в MODX через плагин ImportX

Импорт записей из WordPress в MODX через плагин ImportX

Все! Мы успешно импортировали все статьи из WordPress в MODX Revolution без ошибок, точно с таким же URL, как было (заголовки, описание и содержимое), не потеряв форматирование.

Но все же одна проблемка осталась. Теги я делал используя плагин TVSuperSelect, в админке они после импорта появились, а вот на сайте их не будет, пока мы не пересохраним ресурсы. Так происходит, потому что теги хранятся в двух таблицах в БД и в формате JSON они попали в одну таблицу, а во-вторую нет, там они появляются только после сохранения. Пытался пересохранить ресурсы скриптом через плагин Console в MODX, ресурсы пересохранились успешно, но теги, к сожалению, во-вторую таблицу не добавились. Пришлось заходить в каждый ресурс и нажимать кнопочку "Сохранить".

Инструкцию я сделал на примере из 5 статей, но потом я импортировал 3 000+ статей и тыкать "Сохранить" пришлось дольше...

Надеюсь кому-то будет полезно.


27 января 2021, 00:00    Сергей Глазунов Блог 0    350 0

Комментарии ()

  1. Никита 28 января 2021, 23:36 # 0
    Спасибо большое! Мне помогло) почти не надо быть программистом, просто включить логику.