Перенос действующего сайта с Joomla 1.5 на WordPress, с полной миграцией всех материалов.
В данной статье я пошагово покажу как это сделать своими силами, без использования платных плагинов.
Покурив интернет на тему проведения таких работ, я не обнаружил полного и подробного описания как это сделать быстро, бесплатно и без использования всякого рода «костылей». В большинстве случаев предлагается платный плагин или очень скудное описание, работающее вообще непонятно как.
По данному руководству сделать это смогут даже начинающие веб-мастера. Однако понадобятся элементарные знания как работать в панели управления хостинга и административной панели WordPress.
Итак, приступим.
Шаг 1. Делаем резервные копии.
Так-как мне предстояло работать с «живым» сайтом, перво-наперво делаем резервную копию этого самого сайта. И вообще, всегда делайте резервные копии сайтов, с которыми вам предстоит работать. Это может сберечь кучу нервов как вам так и вашему заказчику.
В данном случае техническая поддержка сайта оказывается в нашей компании, так что с резервными копиями проблем нет, всегда есть возможность «откатиться».
Шаг 2. Устанавливаем WordPress и плагин импорта.
Устанавливаем WordPress на домен или поддомен, на который будем переносить контент. Выполняем вход в админку WordPress и устанавливаем плагин FG Joomla to WordPress. Он сделает основную часть работы и разложит всё по полочкам.
Единственный минус этого плагина, в бесплатной версии, что он не работает с материалами, созданными с помощью компонента K2 в Joomla. А именно с ними мне и предстояло работать. Но это не беда, парочка запросов SQL нам помогут с этим справиться))
Шаг 3. Подготовка базы к экспорту.
Берём базу данных нашего сайта-донора и закачиваем её на тот же хостинг, где находится сайт, на который будем всё переносить. Я сделал так для того, чтобы никак не касаться рабочей версии сайта и его базы данных. На всякий случай так сказать.
Заходим в PHP My Admin нашей базы-донора и переносим категории и статьи компонента K2 в категории и статьи, созданные с помощью стандартных инструментов Joomla.
Вставляем эту строку в окно выполнения запроса SQL к нашей базе. Во всех местах «dbprefix» нужно заменить на префикс таблиц вашей базы.
INSERT INTO dbprefix_categories (title,alias,parent_id,published,access,extension) SELECT name,alias,parent,published,access, 'com_content' FROM dbprefix_k2_categories
Выглядит это вот так
После этого в том же окне вставляем следующий запрос
INSERT INTO `yourDBname`.`dbprefix_content` (`id`, `title`, `alias`, `catid`, `introtext`, `fulltext`, `created`, `created_by`, `created_by_alias`, `checked_out`, `checked_out_time`, `modified`, `modified_by`, `publish_up`, `publish_down`, `access`, `featured`, `hits`, `language`) SELECT `id`, `title`, `alias`, `catid`, `introtext`, `fulltext`, `created`, `created_by`, `created_by_alias`, `checked_out`, `checked_out_time`, `modified`, `modified_by`, `publish_up`, `publish_down`, `access`, `featured`, `hits`, `language` FROM `yourDBname`.`dbprefix_k2_items`
Здесь нужно заменить не только префикс таблиц но и имя базы данных «yourDBname». Жмём «Вперёд» и все наши статьи из компонента K2 перекочевали в основную базу статей Joomla.
Шаг 4. Настройка плагина для импорта.
Настраиваем плагин FG Joomla to WordPress
В настройках нам нужно установить настройки подключения к базе данных и настройки конфигурации импорта
Если сайт, куда переносим чистый, как в моём случае, то очищать его от контента WordPress не нужно. Если такая необходимость есть, то можно воспользоваться кнопкой «Empty WordPress content». Осторожно с этой кнопкой, будут удалены все записи, рубрики и метки WordPress без возможности их восстановления.
«Automatically remove all the WordPress content before each import» (Автоматически удалять весь контент Вордпресс перед каждым импортом) — я не пользовался этой опцией, так как не было необходимости каждый раз чистить базу.
И «URL of the live Joomla web site» — здесь нужно вписать адрес сайта с которого плагин будет всё парсить.
Настраиваем подключение к базе данных.
Заполняем все поля формы соединения с базой данных:
- Hostname — указываем адрес хоста
- Port — устанавливаем номер порта
- Database — указываем название базы данных
- Username — указываем имя пользователя базы данных
- Password — пароль к базе данных
- Joomla Table Prefix — префикс таблиц базы данных
Нажимаем на кнопку «Test the database connection» и, если всё заполнено верно, появится зелёная надпись об успешном соединении с базой.
Если, появляется ошибка, проверяем всё ли мы указали верно. Посмотреть все эти данные можно в панели управления базами данных вашего хостинга.
Приступаем к настройкам непосредственно импорта статей в WordPress. Здесь определяется что и как мы будем парсить.
У меня настройки выглядят следующим образом
Теперь подробнее о каждой отмеченной опции
- Import introtext: to excerpt — Импортируем вступительный текст в «Отрывок» WordPress
- Archived posts: Not imported — не импортируем архивы материалов
- Remove the first image from the content when it is used as the featured image — Убираем первое изображение, если оно используется как изображение записи. Зачем нам дублировать картинки.
- Import media with duplicate names — Импортируем изображения с дублирующимися именами. Пробовал импортировать без этой опции и у меня получалось что одна картинка мелькала в нескольких постах. Контент-менеджер проекта не особо заморачивался с именами файлов и загружал почти к каждому посту файлы с именами «1.jpg» и так далее. Чтобы не столкнуться с такой ситуацией, ставим галочку.
- Timeout for each media: 5 seconds — пробовал менять этот параметр в меньшую сторону, особого эффекта не увидел.
Какие ещё возможности есть
- Import only the featured images. Don’t import the other images — Импортировать только изображения записи, остальные игнорировать. Имеет смысл, если в теле статей нет никаких изображений или они не нужны.
- Remove accents from file names — убирать акценты из имён файлов.
- Import external media — импортировать файлы со сторонних источников. Это нужно, если медиа отображаются с других сайтов и не хранятся на хостинге донора.
- Force media import. Keep unchecked except if you had previously some media download issues. — Типа ускоренная загрузка изображений. Пробовал отмечать эту опцию, особой прибавки в скорости не обнаружил.
- Import meta keywords as tags — импортировать ключевые слова как тэги. Если планируется использование тэгов в WordPress, то можно отметить. Однако не факт, что ключи прописывались верно и можно в результате получить один набор тэгов для всех материалов))
- Import as pages instead of blog posts (without categories) — импортировать страницы как посты без категорий.
Шаг 5. Запуск процесса импорта.
Вот мы и закончили с настройками. Теперь жмём на кнопку «Start\Resume the Import».
В самой верхней части страница плагина вы сможете наблюдать как начнёт тикать счётчик импорта статей.
У меня было так, что счётчик «замирал» через каждые 5-7 минут. Приходилось нажимать «Stop» и снова «Start» и процесс возобновлялся. Мне кажется это связано с ограничением использования памяти для одного процесса, но лезть и разбираться в этом уже желания не было. Если кто знает, напишите решение в комментариях.
После того как все материалы были импортированы нужно нажать на кнопку «Modify internal links»
Это необходимо сделать, если в статьях были ссылки на другие статьи, так называемая перелинковка.
Шаг 6. Завершение.
Проверяем в админке все статьи. Все ли импортировались файлы и прочее.
Заметил одну особенность, плагин импортирует их со статусом «Черновик» и если их массово опубликовать в админке, получится что все они созданы в одно время.
Меня такая ситуация в корне не устраивала и пришлось ещё раз идти в базы данных. Но на этот раз уже в базу нашего нового сайта.
Важно! Перед следующей операцией обязательно сделайте резервную копию новой базы данных!
Обновляем статус наших постов в базе данных WordPress следующим SQL запросом.
UPDATE wp_posts SET post_status = 'publish' WHERE (post_type = 'post' and post_status = 'draft')
В заключение хочу сказать, что в какой то момент у меня опустились руки и я уже хотел было отказаться от этого проекта. Однако, дорогу осилит идущий, говорят мудрые люди! Так я и сделал, немного упорства и смекалки — любая задача решится как надо!
В итоге у меня получился довольно неплохой сайт, оформил его темой Colormag от ThemeGrill. Ниже скрины до и после.
Сайт на Joomla до переезда
Сайт на WordPress после переезда