Вопрос или проблема
Когда я пытаюсь экспортировать публикации через командную строку, я получаю немедленную ошибку о том, что термину не хватает родителя:
$ wp export
Начинается процесс экспорта...
Ошибка: Термину не хватает родителя: name-of-tag (123)
Когда я посмотрел в WordPress, ID был применен к тегу, у которого нет применимой модели родитель/дети. Что тут происходит и как это исправить?
Недавно я попытался экспортировать публикации с большого сайта WP, который я унаследовал, и столкнулся с такой же проблемой.
По какой-то причине существовали термины (ссылаясь на term_id), связанные с другими “родительскими” терминами в таблице “wp_term_taxonomy”, а эти “родительские” термины просто не существовали в таблице “wp_terms”.
Поэтому самым простым решением является просто установить родителя равным 0 для этих терминов в таблице “wp_term_taxonomy”.
ПРЕЖДЕ ЧЕМ ПРОДОЛЖИТЬ, убедитесь, что вы сделали резервную копию вашей базы данных. Я не могу это переоценить…
Затем определите проблемные термины, у которых есть “родительский” термин, который не существует:
/* Для категорий */
SELECT * FROM `wp_term_taxonomy` WHERE taxonomy = 'category' AND parent > 0 AND parent NOT IN(SELECT term_id FROM `wp_terms`);
/* Для тегов */
SELECT * FROM `wp_term_taxonomy` WHERE taxonomy = 'post_tag' AND parent > 0 AND parent NOT IN(SELECT term_id FROM `wp_terms`);
/* Для пользовательских терминов */
SELECT * FROM `wp_term_taxonomy` WHERE taxonomy = 'some_custom_term' AND parent > 0 AND parent NOT IN(SELECT term_id FROM `wp_terms`);
И, наконец, обновите таблицу “wp_term_taxonomy” соответственно и установите “parent” равным 0:
/* Для категорий */
UPDATE `wp_term_taxonomy` SET parent = 0 WHERE taxonomy = 'category' AND parent > 0 AND parent NOT IN(SELECT term_id FROM `wp_terms`);
/* Для тегов (мы, по сути, "упрощаем" их все до одного уровня) */
UPDATE `wp_term_taxonomy` SET parent = 0 WHERE taxonomy = 'post_tag';
/* Для пользовательских терминов */
UPDATE `wp_term_taxonomy` SET parent = 0 WHERE taxonomy = 'some_custom_term' AND parent > 0 AND parent NOT IN(SELECT term_id FROM `wp_terms`);
После этого выполнение команды wp export...
пройдет успешно.
Послесловие: Если вы используете префикс таблицы базы данных, отличный от “wp_”, вам, очевидно, нужно будет обновить все SQL-запросы выше соответственно.
Ответ или решение
Ошибка WP-CLI: "Термин отсутствует родитель"
При попытке экспортировать записи через командную строку вы столкнулись с ошибкой: "Термин отсутствует родитель: name-of-tag (123)". Эта проблема может возникнуть, когда термины в таблице wp_term_taxonomy
ссылаются на родительские термины, которые отсутствуют в таблице wp_terms
.
Причина проблемы
Как правило, это связано с тем, что некоторые термины (например, теги или категории) имеют ссылки на родительские термины, которые были удалены или не были созданы. В результате у этих терминов оказывается недействительная иерархия, что и вызывает ошибку при экспорте.
Решение
Важно! Перед тем как продолжить, обязательно создайте резервную копию вашей базы данных. Это критически важно, так как внесение изменений в базу данных может повредить данные.
Шаг 1: Поиск неподходящих терминов
Вам необходимо сначала выявить термины, у которых указаны родительские термины, отсутствующие в таблице wp_terms
. Для этого выполните следующие SQL-запросы:
Для категорий:
SELECT * FROM `wp_term_taxonomy` WHERE taxonomy = 'category' AND parent > 0 AND parent NOT IN (SELECT term_id FROM `wp_terms`);
Для тегов:
SELECT * FROM `wp_term_taxonomy` WHERE taxonomy = 'post_tag' AND parent > 0 AND parent NOT IN (SELECT term_id FROM `wp_terms`);
Для пользовательских таксономий:
SELECT * FROM `wp_term_taxonomy` WHERE taxonomy = 'some_custom_term' AND parent > 0 AND parent NOT IN (SELECT term_id FROM `wp_terms`);
Эти запросы отобразят все термины, которые имеют недоступные родительские ID.
Шаг 2: Обновление таблицы wp_term_taxonomy
После нахождения неподходящих терминов, вам нужно заменить их родительские ID на 0, чтобы устранить проблему.
Для категорий:
UPDATE `wp_term_taxonomy` SET parent = 0 WHERE taxonomy = 'category' AND parent > 0 AND parent NOT IN (SELECT term_id FROM `wp_terms`);
Для тегов (прямое преобразование всех в плоскую структуру):
UPDATE `wp_term_taxonomy` SET parent = 0 WHERE taxonomy = 'post_tag';
Для пользовательских таксономий:
UPDATE `wp_term_taxonomy` SET parent = 0 WHERE taxonomy = 'some_custom_term' AND parent > 0 AND parent NOT IN (SELECT term_id FROM `wp_terms`);
Шаг 3: Повторная попытка экспорта
Теперь, когда вы обновили родительские ссылки на 0, попробуйте снова выполнить команду экспорта:
wp export
Если все изменения были выполнены корректно, процесс экспорта должен пройти без ошибок.
Заключение
Следуя данным шагам, вы сможете устранить ошибку "Термин отсутствует родитель" и успешно выполнить экспорт записей с помощью WP-CLI. Помните, что если вы используете другой префикс таблиц, вам нужно будет обязательно обновить все SQL-запросы согласно вашему префиксу.