wp-cli ошибка: “Термин не имеет родителя”

Вопрос или проблема

Когда я пытаюсь экспортировать публикации через командную строку, я получаю немедленную ошибку о том, что термину не хватает родителя:

$ 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-запросы согласно вашему префиксу.

Оцените материал
Добавить комментарий

Капча загружается...