Доброго времени суток.
Продолжим.
Шаг второй: Миграция базы данных
Начну с того, что принцип хэширования паролей пользователей на движках отличается, поэтому пароли с DLE на WordPress не мигрируют вообще! Если у вас есть пользователи и открыта регистрация, то после переноса сайта, сделайте рассылку на E-Mail с просьбой восстановить свои пароли через кнопку «Забыли пароль».
Дополнительные поля в записях (если они есть) не будут перенесены, поэтому если хотите их перенести, вам придется найти их в таблицах DLE, понять, где они должны быть в таблицах WP и изменить SQL код, который представлен ниже, чтобы он и их переносил куда следует.
А вообще это должно решиться заменой d_p.full_story в коде на CONCAT(d_p.full_story,d_p.xfields).
Записи, созданные пользователем, который был потом удален, тоже могут быть не перенесены. Рекомендую сначала проверить, чтобы всем записям был указан какой-нибудь автор (существующий пользователь). Добавить автора всем записям, где его нет можно следующим SQL запросом:
|
UPDATE ‘dle_post’ SET author=‘ЛОГИН ПОЛЬЗОВАТЕЛЯ’ WHERE author=»
|
Честно признаюсь я этого не делал, тк сайт был сырой и пользователей небыло. поэтому разу перешел к следующему шагу.
Теперь о SQL коде для миграции
Если вы зайдете в phpMyAdmin, вы увидите, что в базе данных есть таблицы, начинающиеся на «wp_» и на «dle_«. Если все так — значит вы нигде не ошиблись при установке WordPress.
Для нормальной работы сайта, мы хотим в автоматическом режиме перенести пользователей, категории, записи и комментарии в соответствующие таблицы WordPress.
Я читал другие статьи на эту тему и понял, что везде дают один и тот же код для миграции БД, однако этот код имеет существенные недостатки:
- Он не переносит полное имя и инфо о себе для пользователей
- Он не устанавливает необходимые записи прав, поэтому аккаунты пользователей могут работать некорректно
- Он выполняет слияние анонсов и полной версии записей в одну, из за чего при просмотре полной записи будет дублирование текста в начале.
При переносе сайта c DLE на WordPress, я доработал этот код, теперь он переносит данные пользователей, добавляет аттрибуты прав и не переносит анонсы записей. Но если вам все же нужно объединить обе версии каждой записи, то найдите в SQL коде «d_p.full_story» и замените на «CONCAT(d_p.short_story, ‘<!—more—>’ ,d_p.full_story«.
Внимание: если на вашем сайте DLE большое количество записей, рекомендую выполнять этот код не в phpMyAdmin, а через десктопный софт для удаленного подключения к БД, например бесплатный HeidiSQL.
В phpMyAdmin выбираем нашу базу данных, переходим на вкладку «SQL» и вставляем в поле этот код:
Самая важная фраза написана выше. Надо на хостинге найти phpMyAdmin. Разберем подробнее
И вот перейдя на эту вкладку вставляейте код ниже.
|
DELETE FROM `wp_users` WHERE `wp_users`.`ID` != 1;
INSERT INTO wp_users (ID, user_login, user_nicename, user_email, user_registered, display_name) SELECT user_id, name, name, email, FROM_UNIXTIME( reg_date ), name FROM dle_users WHERE user_id != 1;
INSERT INTO wp_usermeta (user_id, meta_key, meta_value) SELECT user_id, «first_name», fullname FROM dle_users;
INSERT INTO wp_usermeta (user_id, meta_key, meta_value) SELECT user_id, «description», info FROM dle_users;
INSERT INTO wp_usermeta (user_id, meta_key, meta_value) SELECT user_id, «admin_color», «fresh» FROM dle_users;
INSERT INTO wp_usermeta (user_id, meta_key, meta_value) SELECT user_id, «show_admin_bar_front», «false» FROM dle_users;
INSERT INTO wp_usermeta (user_id, meta_key, meta_value) SELECT user_id, «wp_capabilities», «a:1:{s:10:\»subscriber\»;b:1;}» FROM dle_users;
INSERT INTO wp_usermeta (user_id, meta_key, meta_value) SELECT user_id, «wp_user_level», 0 FROM dle_users;
TRUNCATE `wp_terms`;
INSERT INTO `wp_terms` (`term_id`, `name`, `slug`) SELECT `id`, `name`, `alt_name` FROM `dle_category`;
TRUNCATE `wp_term_taxonomy`;
INSERT INTO `wp_term_taxonomy` (`term_taxonomy_id`, `term_id`, `description`, `parent`) SELECT `id`, `id`, `descr`, `parentid` FROM `dle_category`;
UPDATE `wp_term_taxonomy` SET `taxonomy`=‘category’;
TRUNCATE `wp_term_relationships`;
INSERT INTO wp_term_relationships (object_id, term_taxonomy_id) SELECT id, category FROM dle_post;
TRUNCATE wp_posts;
INSERT INTO wp_posts (id, post_author, post_date, post_content, post_title, post_name) SELECT d_p.id, d_u.user_id, d_p.DATE, d_p.full_story, d_p.title, d_p.alt_name FROM dle_post AS d_p, dle_users AS d_u WHERE d_p.autor = d_u.name;
TRUNCATE `wp_comments`;
INSERT INTO wp_comments (comment_ID,comment_post_ID, comment_author, comment_author_email, comment_date, comment_content) SELECT id, post_id, autor, email, DATE, text FROM dle_comments;
|
После выполнения этого кода, все ваши пользователи, посты, категории и комментарии будут копированы в WordPress и вы смело можете посмотреть работу сайта. Если пути к картинками в DLE были прописаны правильно, они должны будут отображаться, ведь папку uploades с картинками мы оставили. Вам останется только сделать основные настройки сайта (заголовок, описание, другие настройки в консоли WordPress) и конечно поработать с шаблоном, чтобы все было как вы хотите.
С помощью этого кода, я успешно в 2012 году перенес с DLE на WordPress сайт проекта Club-FL с ~2000 записями и более 3000 пользователями.
Ну что проверяйте, сайт должен наполниться статьями.
Единственный минус, мне пришлось вручную вставлять картинки из записей DLE в записи WP. Как это решить пока не знаю. Удачи.