Как перенести записи с WordPress на MODX Revolution
Пошаговая инструкция, как перенести записи с WordPress на MODX Revo.
Перенесем контент, теги и сохраним URL структуру.
Если Вы не умеете писать парсеры для импорта и вообще туговато со всем этим, то эта инструкция для Вас.
Что нам нужно:
- Sublime Text 3 — текстовый редактор.
- Экспортированный файл с записями *.xml из WordPress.
- Плагин 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 находим Инструменты -> Экспорт -> Записи -> Выбираем раздел -> Скачать файл экспорта.
Так мы получим файл формата *.xml с записями, с тегами, с комментариями к записям, с датами публикации, с URL адресом - в общем, все данные в одном файле. Но там так же будет еще и куча лишних параметров, от которых нам предстоит очистить этот файл.
Шаг 2 - Чистим полученный файл *.xml в редакторе Sublime Text
Нужно удалить лишнее и оставить только нужные строки между тегами <item>...</item>
и сами теги, они нам еще пригодятся.
Используя горячие клавиши, логику и смекалку удалим ненужные строки и объединим каждую запись в одну строку. Но для начала выравниваем код, используя технологичность кода и заранее установленную функцию в Sublime Text, жмем правой кнопкой мыши, выбираем HTML/CSS/JS Prettify -> Prettify Code.
Удаляем ненужные строки: жмем ⌘ + 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>
жмем:
- Alt + Enter - Найти все совпадения.
- ⌘ + Shift + A - Выделить текст между двумя парными тегами.
- ⌘ + J - Объединить выделенные строки.
Таким нехитрым путем чистим документ и оставляем только нужные нам строки с тегами. И получаем примерно такое:
Дальше простым "Поиск и Замена" чистим лишнее и будем приводить теги в формат JSON в одну строку.
Отключив функцию "регулярные выражения", находим сначала <![CDATA[
с пробелом и потом это ]]>
заменяем на пустоту.
Удаляем лишние комментарии с пробелами от WP <!-- wp:paragraph -->
в контенте, чтоб все было чистенько.
Приводим теги в формат JSON в одну строку.
- ⌘ + F в поиск вставляем
<category
жмем ALT + Enter и ⌘ + Shift + A так мы находим все содержимое между этими тегами. - Один раз нажимаем стрелочку влево на клавиатуре и мигающий курсор встает именно в начало содержимого тега.
- ⌘ + Delete и потом TAB чтоб выровнять отступ и пишем вначале тегов
"
- ⌘ + стрелочка вправо, чтоб курсоры переместились в конец закрывающего тега
</category>
просто стираем его и пишем",
и жмем ⌘ + J сделав все в одну строку. - Учтите, если тегов много, они будут в одну строку, но с переносом на новую. Чтоб поставить открывающуюся квадратную скобку вначале, выделяем закрывающий тег выше и захватываем на новой строке кавычку рядом с тегом
</wp:post_name> "
и заменяем везде это на||["
- Далее удалим лишнюю запятую в конце и закроем квадратную скобку. Находим
,</item>
и заменяем на]||1||4||
где 1 - это richtext, а 4 - это id шаблона template.
Получаем примерно вот это:
Дальше все просто, заменить открывающиеся/закрывающиеся теги на наш разделитель ||
и чтоб каждая "запись/ресурс" была с новой строки. Естественно, удалив лишние теги <item>
.
И не забываем в самом верху вставить шапку pagetitle||description||content||publishedon||alias||tv2||richtext||template||
Итого должен получиться вот такой готовый для импорта файл:
Шаг 3 - Импортируем готовый файл в MODX Revo через плагин ImportX
Сначала в плагине на вкладка "Базовые настройки" указываем id ресурса родителя, куда мы хотим импортировать статьи. Отмечаем галочками то, что вам нужно.
Дальше вставляем в поле "Чистый CSV" наш текст из подготовленного файла или можете просто сохранить файл в формате *.txt и прикрепить, где написано "Загрузить файл CSV". Обязательно не забываем указать разделитель ||
и жмем "Начать импорт".
Все! Мы успешно импортировали все статьи из WordPress в MODX Revolution без ошибок, точно с таким же URL, как было (заголовки, описание и содержимое), не потеряв форматирование.
Но все же одна проблемка осталась. Теги я делал используя плагин TVSuperSelect, в админке они после импорта появились, а вот на сайте их не будет, пока мы не пересохраним ресурсы. Так происходит, потому что теги хранятся в двух таблицах в БД и в формате JSON они попали в одну таблицу, а во-вторую нет, там они появляются только после сохранения. Пытался пересохранить ресурсы скриптом через плагин Console в MODX, ресурсы пересохранились успешно, но теги, к сожалению, во-вторую таблицу не добавились. Пришлось заходить в каждый ресурс и нажимать кнопочку "Сохранить".
Инструкцию я сделал на примере из 5 статей, но потом я импортировал 3 000+ статей и тыкать "Сохранить" пришлось дольше...
Надеюсь кому-то будет полезно.



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