So entfernen Sie doppelte Begriffe in einem Vokabular

8

Ich habe einen Wortschatz mit vielen Begriffen, die Duplikate sind. Wie kann ich diese Begriffe entfernen?

Ich habe viele Duplikate; Ich brauche eine Möglichkeit, sie zu löschen, die sie nicht einzeln löscht.

Mathankumar
quelle

Antworten:

2

Führen Sie diesen Code einmal in hook_init oder einem benutzerdefinierten PHP-Block oder mit Drush aus

<?php

$vid = 1; // Replace 1 by vocabulary id for which you want to remove duplicates.

$terms = taxonomy_get_tree($vid, $parent = 0, $max_depth = NULL, $load_entities = FALSE);

// Loop through all terms in vocabulary
foreach ($terms as $term) {
  // Get all matching terms by term name
  $matching_terms = taxonomy_get_term_by_name($term->name);
  foreach ($matching_terms as $matching_term) {
    /* Check matching term belongs to vocabulary we are searching and matching term should not be exact term that first found so that duplicate can be removed */
    if ($matching_term->vid == $vid && $matching_term->tid != $term->tid) {
      // Do Term Delete
      taxonomy_term_delete($matching_term->tid); 
    } 
  }
}

?>

Wichtiger Hinweis: Erstellen Sie eine Datenbanksicherung, bevor Sie den obigen Code ausführen, damit Sie ihn wiederherstellen können, wenn etwas schief geht!

Anil Sagar
quelle
1
Es ist erwähnenswert, dass dadurch Begriffe gelöscht werden, ohne Verweise auf andere Knoten zu aktualisieren oder zu überprüfen. Es ist sehr gefährlich.
Christian
3

Das Term Merge- Modul könnte Ihnen helfen.

Wenn Sie die Taxonomie für kostenlose Tagging-Zwecke verwenden, können leicht mehrere Begriffe mit derselben Bedeutung verwendet werden. Dies kann an Rechtschreibfehlern liegen oder daran, dass verschiedene Benutzer unterwegs einfach auch Begriffe erfinden.

Als Administrator möchten Sie dann möglicherweise solche Fehler korrigieren oder auch Begriffe vereinheitlichen, um die Taxonomie auf einen überschaubareren Satz zu reduzieren. Mit diesem Modul können Sie mehrere Begriffe zu einem zusammenführen und gleichzeitig alle Felder aktualisieren, die auf diese Begriffe verweisen, um stattdessen auf den Ersatzbegriff zu verweisen.

mrded
quelle
Dies ist definitiv die beste Option.
Christian
2

Sie können dies mit den Regeln tun, um dies zu tun:

**Event**
After updating existing content

Ich habe nach dem Aktualisieren eines Inhalts ausgewählt, dass Sie alle Knoten auswählen und Aktualisieren auswählen können, das nicht veröffentlicht / veröffentlicht werden kann - URL-Alias ​​aktualisieren, jeder funktioniert.

**Conditions**
Content is of type 

und geben Sie Ihren Inhaltstyp ein

**Actions**
Add loop

Stellen Sie sicher, dass die Schleife Ihre Tags durchläuft. Mein Maschinenname lautet "field-basic-tags", sodass Sie in der Schleifen-Datenauswahl so etwas wie "node: field-basic-tags" auswählen.

dann würden Sie dieser Schleife eine Aktion hinzufügen,

Add an item to a list

Wählen Sie "Listenelement: Eltern" aus der Datenauswahl

Aktivieren Sie das Kontrollkästchen Eindeutigkeit erzwingen, und fügen Sie möglicherweise auch Folgendes hinzu:

Show a message on the site

um sicherzustellen, dass Ihr Code funktioniert.

Hier ist ein Export der Regel.

    { "rules_enforce_uniqness_tag" : {
    "LABEL" : "Enforce Uniqness Tag",
    "PLUGIN" : "reaction rule",
    "REQUIRES" : [ "rules" ],
    "ON" : [ "node_update" ],
    "IF" : [
      { "node_is_of_type" : { "node" : [ "node" ], "type" : { "value" : { "page" : "page" } } } }
    ],
    "DO" : [
      { "LOOP" : {
          "USING" : { "list" : [ "node:field-basic-tags" ] },
          "ITEM" : { "list_item" : "Current list item" },
          "DO" : [
            { "list_add" : {
                "list" : [ "list-item:parent" ],
                "item" : [ "list-item" ],
                "unique" : 1
              }
            }
          ]
        }
      },
      { "drupal_message" : { "message" : "Done" } }
    ]
  }
}
Saadlulu
quelle