Перенос данных (необязательно данных) — дело муторное и неблагодарное. Идеально, если процесс переноса был бы максимально простой, автоматический и не требующий никаких действий от пользователя (меня). Я думал, что на MaxSite нет такого решения. В общем, я и не надеялся. Некоторое время назад решил погуглить плагины/расширения на предмет переноса данных с MaxSite куда-либо, и наткнулся на плагин Importer-from-maxsite от Сергея Захарченко.
Чисто теоретически, сложности в процессе переноса данных нет. Все данные лежат в таблицах. Перенос сводится к тому, нужно вытащить данные из одних таблиц c определенными колонками и перевести их в таблицы с другими колонками.
Нужные нам таблицы, отвечающие за данные в статьях в MaxSite/Wordpress очень схожи:
- mso_page / wp_posts — содержит записи со статьями
- mso_users / wp_users — содержит авторов статей, если автор один, то вообще не нужна особо
- mso_category / wp_terms- содержит названия рубрик, которые назначены на статьи
- mso_cat2obj / wp_term_relationships — содержит связь между рубрикой и статьей
- mso_comments / wp_comments — содержит связь комментариев и статьи
Но все же я хотел, чтобы все сделалось за меня. Поэтому плагин Importer-from-maxsite просто спасение. Плагин делает практически 99% всего сам. Для его работы нужно сделать 3 вещи:
- поставить и активировать на сайт c MaxSite плагин export-api
- установить на сайт WordPress плагин Importer-from-maxsite
- перейти на страницу плагина в WordPress и ввести адрес сайта MaxSite. Сайт WordPress должен иметь возможность физически зайти на сайт на MaxSite
В общем, отрабатывает на ура, переносит статьи, категории, картинки.
Что у меня не получилось:
- скрипт не обработал ссылки на файлы, и из-за этого оставляет ссылки в том виде, в каком они были
- добавление картинок в медийную библиотеку WordPress как есть. Но это скорее проблема WordPress, а не скрипта. Потому что получить помойку из картинок из всех статей в одной папке, конечно, не очень идея.
Пришлось поправить в плагине основной файл importer-from-maxsite\app\class-importer.php. Удобно в любой части файла сделать var_dump и посмотреть на структуру самих данных и дописать свою логику уже походу.
Коротко, что я изменил в файле class-importer.php :
- поставил плагин Media Library Folders, который поможет создавать свою структуру папок в медиабиблиотеке.
Большой плюс состоит в его функции синхронизации, когда он сам подхватывает содержимое внутри папок и сам добавляет его в базу медиаданных.
Для картинок и файлов из статей создал отдельные папки и перенес все в них. Для картинок в функции import_post_images сделал копирование физическое с одной локальной папки в другую через copy. Для файлов тоже самое, только использовал копию функции import_post_images, где вместо выделения картинок
preg_match_all( '@src="([^"]+)"@', $content, $images );
использовал поиск по обрамленным ссылкам на файлы
preg_match_all( '@\[dc\].*href="([^"]+)".*\[\/dc\]@', $content, $images ); - Метки, которые указаны к статьям, почему-то не захотели переносится, добавил выделенные строчки в плагин:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | if ( is_wp_error( $post_id ) ) { $this->errors[] = __( 'Could not import page', IFM_TEXT_DOMAIN ) . ' ' . $page['page_id'] . ": ( {$page['page_title']} ) "; } else { $this->posts_counter ++; // added update_post_meta($post_id,'views',$page['page_view_count']); wp_set_post_terms($post_id, $page["page_tags"], 'post_tag', true ); // foreach ( $page['page_comments'] as $comment ) { $this->import_comment( $post_id, $comment ); } |
В общем, перенес данные быстро, по большей части, проблема была только в нестандартных статьях и оформлении. Во всем остальном, плагин Importer-from-maxsite от Сергея Захарченко просто пушка. Спасибо Сергею!
Ошибка 🙁
мой_домен.ком/export_api/v1/categories недоступен
Вам надо установить на сайте с MaxSite плагин, которые сделает эти адреса доступными. Если плагин установили, но в браузере не отображается этот урл, то скорее всего идет блокировка либо через .htaccess либо на уровне самого движка