Теперь, когда я понял, что это ошибка, и она еще не исправлена, моя главная цель - просто очистить абзацы-сироты.
Кто-то создал этот модуль: Очистка абзаца , но я не фанат использования модулей для таких целей.
Итак, ниже я опубликую свою первую успешную попытку решить ее.Я должен предупредить , что это небезопасно , потому что оно удаляет абзацы!
Решение не проверено на использование ревизий, перевод контента и т. Д. Так что это может испортить ваш день. Сделайте резервную копию вашего сайта .
Используя модуль Devel
, перейдите на Development
> Execute PHP Code
.Вставьте и выполните следующий код:
// get all paragraphs
$deleted = [];
$paragraph_ids = \Drupal::entityQuery('paragraph')->execute();
$paragraphs = \Drupal::entityTypeManager()->getStorage('paragraph')->loadMultiple($paragraph_ids);
foreach ($paragraphs as $target_id => $paragraph) {
// get parent entity (node, taxonomy, paragraph, etc.)
$parent = $paragraph->getParentEntity();
$field_name = $paragraph->parent_field_name->value;
// Check if current paragraph exists in parent entity field values
$exists = FALSE;
$values = is_null($parent) ? [] : $parent->get($field_name)->getValue();
foreach($values as $value) {
if ($value['target_id'] == $target_id) {
$exists = TRUE;
}
}
// Delete paragraphs that aren't linked to an entity they claim as a parent
if (!$exists) {
$paragraph->delete();
$deleted[] = $target_id;
}
}
print "Deleted paragraph IDs: " . implode(', ', $deleted);