Je veux supprimer tous les termes d'un vocabulaire mais pas supprimer le vocabulaire lui-même.
Je peux le faire sur la base de données, mais je préfère utiliser l'API si disponible dans D8.
$existingTerms = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree('mycustomvocab');
foreach ($existingTerms as $existingTerm) {
// Delete vocabulary term *** This function is not available in D8 ***
taxonomy_term_delete($existingTerm->tid);
// Delete vocabulary - *** Not what is required ***
/*
$vocab = Vocabulary::load($existingTerm->vid);
if (!is_null($vocab)) {
$vocab->delete();
}
*/
}
C'est comme ça que je le fais en ce moment jusqu'à ce que je trouve une meilleure solution
db_query("DELETE FROM {taxonomy_term_hierarchy} WHERE `tid` IN (SELECT tid FROM {taxonomy_term_data} WHERE `vid` = :ctype)", array(':ctype' => 'mycustomvocab'));
db_query("DELETE FROM {taxonomy_term_field_data} WHERE `vid` = :ctype", array(':ctype' => 'mycustomvocab'));
db_query("DELETE FROM {taxonomy_term_data} WHERE `vid` = :ctype", array(':ctype' => 'mycustomvocab'));
$tids = \Drupal::entityQuery('taxonomy_term')
->condition('vid', 'mycustomvocab')
->execute();
$controller = \Drupal::entityTypeManager()->getStorage('taxonomy_term');
$entities = $controller->loadMultiple($tids);
$controller->delete($entities);
Notant simplement une autre approche pour supprimer le terme de taxonomie individuellement, utile dans certains cas:
// Example to load and delete a taxonomy term
$tid = 12;
if ($term = \Drupal\taxonomy\Entity\Term::load($tid)) {
// Delete the term itself
$term->delete();
}
* Si vous avez accès à Drupal Shell exécute les commandes suivantes: drupal Shell
* Copiez et collez ensuite
function truncate_vocab($vid){
$tids = \Drupal::entityQuery("taxonomy_term")->condition("vid",$vid)->execute();
$controller = \Drupal::entityManager()->getStorage('taxonomy_term');
$entites = $controller->loadMultiple($tids);
$controller->delete($entites);
}
$vocabs = taxonomy_vocabulary_get_names();
foreach($vocabs as $vid){
truncate_vocab($vid);
}
Je vais essayer d'en faire une commande Drupal Shell à l'avenir.