diff -u b/src/Plugin/Field/FieldWidget/OptionsShsWidget.php b/src/Plugin/Field/FieldWidget/OptionsShsWidget.php --- b/src/Plugin/Field/FieldWidget/OptionsShsWidget.php +++ b/src/Plugin/Field/FieldWidget/OptionsShsWidget.php @@ -173,6 +173,7 @@ if (isset($user_input[$field_name])) { $default_value = $user_input[$field_name]; } + $target_bundles = $this->getFieldSetting('handler_settings')['target_bundles']; $settings_additional = [ 'required' => $this->required, @@ -286,6 +287,19 @@ if (!is_array($value)) { $value = [$value]; } + + // If the terms lineage is stored the parents should be removed. + if (!empty($value) && !empty($element['#shs']['settings']['save_lineage'])) { + /** @var \Drupal\taxonomy\TermStorageInterface $term_storage */ + $term_storage = \Drupal::entityTypeManager()->getStorage('taxonomy_term'); + foreach ($value as $key => $value) { + if ($term_storage->loadChildren($value)) { + unset($value[$key]); + } + } + $value = array_values($value); + } + if ($element['#shs']['settings']['anyValue'] === reset($value)) { if (!$element['#required']) { return;