語彙の重複する用語を削除する方法


8

重複している用語が多い語彙があります。これらの用語を削除するにはどうすればよいですか?

多くの重複があります。1つずつ削除するのではなく、削除する方法が必要です。

回答:


2

このコードをhook_initまたはカスタムphpブロックで1回実行するか、drushを使用して実行します

<?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); 
    } 
  }
}

?>

重要な注意:上記のコードを実行する前にデータベースのバックアップを作成して、問題が発生した場合に復元できるようにしてください。


1
これは、他のノードへの参照を更新またはチェックせずに用語を削除することに注意してください。その非常に危険です。
クリスチャン

3

用語マージモジュールはあなたを助けることができます。

無料のタグ付けの目的で分類法を使用する場合、同じ意味を持ついくつかの用語が存在することは簡単です。これは、スペルミスが原因であるか、別のユーザーが同義語をそのまま使用していることが原因である可能性があります。

管理者は、このようなエラーを修正したり、同義語を統一したりして、分類法をより管理しやすいセットにまとめることができます。このモジュールを使用すると、複数の用語を1つにマージし、代わりにそれらの用語を参照するすべてのフィールドを更新して置換用語を参照することができます。


これは間違いなく最良の選択肢です。
クリスチャン、

2

ルールを使用してこれを行うことができます。これを行うには:

**Event**
After updating existing content

コンテンツを更新した後、すべてのノードを選択して更新を選択できるように選択しました。これは、非公開/公開にすることができます-URLエイリアスの更新はすべて機能します。

**Conditions**
Content is of type 

コンテンツタイプを入力します

**Actions**
Add loop

ループがタグをループすることを確認してください。私のタグのmachine-nameは「field-basic-tags」であるため、ループのデータセレクターで「node:field-basic-tags」などを選択します。

次に、そのループにアクションを追加します。

Add an item to a list

データセレクターから「list-item:parent」を選択しました

[一意性を適用]チェックボックスをオンにします。追加することもできます。

Show a message on the site

コードが機能することを確認します。

これはルールのエクスポートです。

    { "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" } }
    ]
  }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.