Вопрос

Я хочу сделать пользовательский импорт из пользовательского CMS в WordPress. Глядя на файлы экспорта/импорта в WordPress, я могу соответствовать большей части структуры. Тем не менее, ему не хватает отношений для пользовательских таксономий и постов при экспорте/импорте.

Есть ли исправление для этого или было бы проще не использовать сценарий импорта WordPress? Скорее, напишите пользовательский SQL, чтобы справиться со всем этим.

Кроме того, поскольку я разрабатываю этот новый сайт, контент на старом сайте (пользовательские CMS) все еще обновляется. За несколько дней до запуска будет заморозить, где я могу сделать еще одну свалку DB и Reimport. Тем не менее, проблема, которую я предвижу, заключается в том, что мне нужно будет удалить все посты и отношения и вернуть контент. Есть ли простой способ удалить все посты и отношения, чтобы предотвратить каких -либо дубликатов и переосмыслить контент?

Это было полезно?

Решение

Не должно быть трудно добавить обработку для пользовательских типов публикаций или таксономий в рамках пользовательского импортера для WordPress. Вам просто нужно убедиться, что ваши пользовательские типы публикаций и таксономий зарегистрировались до запуска импортера. После регистрации вы можете использовать wp_insert_post () и wp_set_object_terms () на этих пользовательских типах. Это, вероятно, в конечном итоге станет гораздо лучшим решением, чем попытка написать пользовательский SQL, поскольку он заполняет множество дополнительных полей, которые не всегда очевидны, например, количество терминов и т. Д.

Всякий раз, когда я работаю над сценарием для импорта данных из другой системы, я всегда создавал функции Nuke, по той причине, по которой вы упомянули, и только потому, что импорт данных всегда является кучей проб и ошибок. Функция обычно состоит из одного цикла для вызова wp_delete_post () для каждого поста. В зависимости от импорта, я также могу добавить еще один, чтобы вызвать wp_delete_term () на каждый термин в базе данных.

$post_ids = $wpdb->get_col("SELECT ID FROM $wpdb->posts WHERE post_type in ('post', 'attachment', [...other post types])");
foreach($post_ids as $post_id) {
    wp_delete_post($post_id, true);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top