При переносе записей с одного WordPress сайта на другой столкнулся с проблемой, что при экспорте с помощью встроенного функционала WordPress и импорта с помощью практически встроенного плагина WordPress Importer, не переносятся миниатюры записей (Featured Images). Было испробовано несколько вариантов, но они или не делали того, что мне надо или из-за ограничений хостинга, это было сделать невозможно. Пришлось писать код самому.
Идем по порядку:
- Делаем с помощью PHPMyAdmin копии таблиц в базе wp_posts и wp_postmeta в xp_posts и xp_postmeta соответственно.
- Делаем с помощью PHPMyAdmin экспорт таблиц xp_post и xp_postmeta
- Импортируем таблицы на новом сервере в базу WordPress (предварительно проверив, что имена таблиц изменены)
- Копируем изображения с wp-content\uploads старого сервера на новый.
- Прописываем данные для доступа к базе в скрипте и запускаем его.
- Наслаждаемся результатом
А теперь по порядку:
Пункт 1 делаем или вручную после экспорта таблиц или в PHPMyAdmin выбираем одну таблицу, нажимаем Operations -> Copy table to (database.table)
После выполнения пункта 3 у вас в базе должны быть эти 4 таблицы
Для того что бы понять как связаны эти две таблицы, записи и миниатюры записей (Featured Images), выполним три запроса в базе WordPress.
Запрос 1.
1 2 3 4 5 6 7 8 |
SELECT id, post_status, post_parent, guid, post_type, post_mime_type FROM `wp_posts` WHERE id = '526' OR post_parent = '526' |
Запрос 2.
1 2 3 4 5 |
SELECT * FROM `wp_postmeta` WHERE post_id = '526' AND meta_key = '_thumbnail_id' |
Запрос 3.
1 2 3 |
SELECT * FROM `wp_postmeta` WHERE post_id = '9625' |
Рассмотри связь между записью и миниатюрой записи (Featured Images) на картинке ниже:
Как вы видите в таблице wp_posts есть запись с id 526 (то что это запись описано в столбце post_type, а то что это основная запись, а не ее версия по столбцу post_status с значением publish). С помощью Запроса 1 мы получаем саму запись и всю связанная с ним информация (версии и изображения).
Так как изображений может быть несколько, для того что бы найти нужное нам используем запрос 2 в таблице wp_postmeta. В результате мы увидим, что есть запись с meta_id = 22375 и значением поля meta_value = 9625. Это означает, что в таблице wp_posts запись с id = 9625 содержит информацию о миниатюре записи (Featured Image).
И Запросом 3 получаем мета данные данного изображения.
В моем случае все записи есть в старой и новой таблице xp_posts и wp_posts (у них может отличаться ID) и есть данные и мета данные миниатюр записей (Featured Image).
Написал простой скрипт, без излишеств и суеверий, провел 2-3 теста и в результате все записи в новой базе получили свои миниатюры (Featured Images).
При написании использовал фреймворк для работы с базой данных — Medoo.
Будут вопросы пишите.
P.S. Возможно понадобится воспользоваться sql запросом для правки ссылок на файлы:
1 |
UPDATE wp_posts SET guid = replace(guid, 'http://www.oldsite.com','https://roboteye.biz'); |
Спасибо огромное!!! Очень помогли!!!
салют! розумію, що сильно нерозумно зараз буде) зіткнувся з проблемою випадіння зображень записи після перенесення контенту ВП на інший сайт штатними засобами. єдиний спосіб, який виглядає робочим, — це ваш скрипт. але чи то лижі не їдуть, чи то я криворукий, але у мене не виходить щось (в звітах PHP Fatal error: Class ‘medoo’ not found in /home/sitename/public_html/index.php on line 13. бібліотеку поклав в /lib/medoo.php. підкажете, куди копати? (
Добрый день,
должно быть так
/home/sitename/public_html//lib/medoo.php