回答:
このコードを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);
}
}
}
?>
重要な注意:上記のコードを実行する前にデータベースのバックアップを作成して、問題が発生した場合に復元できるようにしてください。
ルールを使用してこれを行うことができます。これを行うには:
**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" } }
]
}
}