Как импортировать json в wordpress в виде типа постов?
Нужно скопировать каталог с сайта. Я спаршу каталог с сайта с помощью nodejs в json файл. Нужно преобразовать его в формат который wordpress съест например через импорт бэкапа чтобы этот каталог загрузить на другой сайт. С учетом иерархии категорий. Подскажите как проще загрузить всё это в Wordpress. Может есть какие-то библиотеки или плагины которые подойдут для такой задачи. Пока я вижу вариант разобраться как работает формат импорта/экспорта wordpress. Преобразовать нодой json в такой формат и загрузить как бэкап.
Ещё как вариант как я понял можно генерировать страницы через restApi и брать данные прямо из json файла, но тогда данные нельзя будет из админки поменять. Главная цель скопировать каталог с другого сайта на мой с wordpress. Может кто увидит более простое решение.
Дополнительно:
yarovikov @weart wp all import
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Самый простой вариант для импорта каталога из JSON в WordPress - не пытаться генерировать XML-экспорт WordPress вручную, а использовать импорт через WP All Import или написать небольшой одноразовый импортёр. Выбор зависит от объема и структуры данных.
Если нужен быстрый путь без разработки, используйте
WP All Import: он умеет читать JSON/XML, создавать записи произвольного типа, привязывать таксономии, загружать изображения и обновлять существующие записи по уникальному ключу. Для каталога это обычно быстрее, чем разбираться с WXR-форматом WordPress.Если нужен контролируемый импорт кодом, делайте отдельный скрипт или WP-CLI команду:
$items = json_decode(file_get_contents(__DIR__ . '/catalog.json'), true); foreach ($items as $item) { $post_id = wp_insert_post([ 'post_type' => 'catalog_item', 'post_status' => 'publish', 'post_title' => sanitize_text_field($item['title']), 'post_content' => wp_kses_post($item['description'] ?? ''), 'meta_input' => [ '_source_id' => sanitize_text_field($item['id']), 'price' => sanitize_text_field($item['price'] ?? ''), ], ]); if (is_wp_error($post_id)) { continue; } if (!empty($item['categories'])) { wp_set_object_terms($post_id, array_map('sanitize_text_field', $item['categories']), 'catalog_category'); } }
Иерархию категорий лучше импортировать отдельно перед товарами: сначала создать родительские термины, сохранить соответствие
external_id -> term_id, затем создавать дочерние. Иначе легко получить дубли категорий с одинаковыми названиями.REST API тоже подходит, но он медленнее для больших импортов и требует авторизации. Генерировать страницы "на лету" из JSON без сохранения в WordPress я бы не советовал, если контент потом должны редактировать из админки. Для каталога правильнее создать CPT, таксономии и метаполя, чтобы данные стали нормальной частью WordPress.