語彙からすべての用語を削除する方法(一括削除)


回答:


15

分類法マネージャーには一括削除機能があります。ボキャブラリーのすべての用語を選択して、[削除]ボタンをクリックするだけです。

ここに画像の説明を入力してください

あなたがそれをしたいなら、以下のようなコードを使用してそれを助けたいでしょう:

$vocabulary = taxonomy_vocabulary_machine_name_load('my_custom_vocabulary');
foreach (taxonomy_get_tree($vocabulary->vid) as $term) {
  taxonomy_term_delete($term->tid);
}

わかりました。TaxoManagerには一括選択オプションがありませんが、何百もの用語がある場合は、それぞれを1つずつ確認する必要があります。
giorgio79

ええ、それは実際には一種の迷惑なことです。そのための機能リクエストを提出するかもしれません
Clive

2
UIとコードメソッドの両方を追加していただきありがとうございます。常に非常に役立つ+1
Matt Fletcher、

5
@ giorgio79最新のブラウザのほとんどは、Shift +クリックのチェックボックスをサポートしています。チェックボックスをクリックしてから、同じグループ内の別のチェックボックスをShift +クリックすると、それら2つの間のすべてのチェックボックスが選択/選択解除されます。
ЕлинЙ.

26

コンテンツタイプ、分類用語などでコンテンツを一括削除するお気に入りの方法では、http://drupal.org/project/develモジュールを利用します。語彙のすべての用語を削除する場合:

  1. DevelおよびDevel Generateモジュールを有効にする
  2. 開発>用語の生成に移動します
  3. 用語を削除したい語彙を選択してください
  4. 生成する用語の数に「0」を入力します
  5. 「新しい用語を生成する前に既存の用語を削除する」にチェックを入れます
  6. [送信]をクリックします

出来上がり-空の語彙、それ以外は手つかず。


モジュールが呼び出されます:Devel Generate
kenorb '28

6

次のコマンドを使用できます。

drush -v eval 'foreach(taxonomy_get_tree(123) as $term) { taxonomy_term_delete($term->tid); }'

動作しない場合は、キャッシュ(memcachedなど)を必ずクリアしてください。

または、次のダーティーSQLクエリを使用してより高速な方法:

drush sqlq "DELETE FROM taxonomy_term_data WHERE vid = 123"

ここで、123は変更する必要がある語彙IDです。

vid次のコマンドで語彙名を取得できます。

drush sqlq "SELECT name, vid FROM taxonomy_vocabulary WHERE name = 'vocabulary_name'"

以下も参照してください。


1
美しくシンプルに機能します:-)
Alejandro Moreno

1
正解です。あなたはより多くの賛成票に値します!
Lautaro Rosales

1
あなたも、両者を組み合わせることができますしている感じの陽気の場合: drush sqlq "DELETE FROM taxonomy_term_data WHERE vid = (SELECT vid FROM taxonomy_vocabulary WHERE name = 'vocabulary_name')"
カークランド

2

管理ビューは、事前構成されたVBOビューを提供するだけです。VBO自体は用語(または他のエンティティタイプ)で問題なく機能します。VBOを自分でインストールし、必要なビューを作成してから、VBOを使用して用語を削除します。


2

Drupal 7のボキャブラリー内のすべての分類用語を一括削除するには、taxonomy_term_deleteすべての用語をループして関数を使用します。

次の例について考えてみます。

// Get metadata about the vocabulary from its machine name
$vocab = taxonomy_vocabulary_machine_name_load('TAXONOMY_MACHINE_NAME');

// Get a hierarchical representation of all terms
$terms = taxonomy_get_tree($vocab->vid);

// Loop thru all terms in the taxonomy, deleting each one
if (!empty($terms)) {
  foreach ($terms as $term) {
    taxonomy_term_delete($term->tid);
  }
}

さらに簡単に、DrushDevelモジュールがインストールされている場合は、次のコマンドを使用して、分類法*内のすべての用語をシェルの快適さから一括削除できます。

$ drush generate-terms TAXONOMY_MACHINE_NAME 0 --kill

*これは、必要に応じて実行できるDevel Generateモジュールが有効になっていることを前提としています。

$ drush en -y devel && drush en -y devel_generate


UIから使用すると爆発するため、drush generate-termsに感謝します
GiorgosK 2017年

1

VBOで管理ビューを使用して、分類用語のデフォルト表示を置き換えるビューを取得することをお勧めします。

あなたがしなければならないことは次のとおりです:

  1. もちろんこれらのモジュールを有効にする
  2. 「Administration:Taxonomy terms」というビューを有効にします
  3. 「一括操作:分類用語」というビューに列を追加します
  4. FLUSH CACHES-次に、[管理]> [構造]> [分類]> [特定のVocab]に移動します

ビューの一括操作と管理ビュー


1

ここにすべての分類用語を削除するボタンを追加する方法に関するブログ投稿を書いたところです。

基本的に:

これにはjQuery Easy Confirm Dialogプラグインを使用しています。まずここからライブラリをダウンロードし、これをテーマのjsフォルダーに配置します。

次に、カスタムモジュールに小さなコードを含む「すべての条件を削除」ボタンを追加します。

function hook_form_alter(&$form, &$form_state, $form_id) {
    switch($form_id) {
        case 'taxonomy_overview_terms':

            if($form['#total_entries']) {
                drupal_add_library('system', 'ui.dialog');
                drupal_add_js(drupal_get_path('theme', 'YOUR_THEME_NAME').'/js/jquery.easy-confirm-dialog.js');         
                $js = 'jQuery(document).ready(function($){$(".confirm").easyconfirm({locale: { title: \'Delete all '.$form['#vocabulary']->name.' terms\', button: [\'No\',\'Yes\']}});});';
                drupal_add_js($js, array('type'=>'inline'));
                $form['actions']['delete_all'] = array(
                    '#markup' => '<a href="/drupal//admin/structure/taxonomy/'.$form['#vocabulary']->vid.'/delete-all" class="button confirm" title="Are you sure you want to delete all terms from the '.$form['#vocabulary']->name.' vocabulary?">Delete All Terms</a>',
                    '#weight' => 10,
                    '#attributes' => array('class' => array('button'))
                );
            }

            break;
    }
}

次に、用語を削除するための関数へのパスを定義する必要があります。

function hook_menu() {
    $items = array();
    $items['admin/structure/taxonomy/%/delete-all'] = array(
        'title' => 'Delete all taxonomy terms',
        'type' => MENU_CALLBACK,
        'page callback' => 'delete_all_taxonomy_terms',
        'page arguments'    =>  array(3),
        'access arguments'  =>  array('administer taxonomy'),
    );
    return $items;
}

最後に、実際に用語を削除する機能を追加します。

function delete_all_taxonomy_terms($vid) {
    $vocabulary = taxonomy_vocabulary_load($vid);
    $query = new EntityFieldQuery();
    $result = $query
        ->entityCondition('entity_type', 'taxonomy_term')
        ->propertyCondition('vid', $vid)
        ->execute();
    foreach($result['taxonomy_term'] as $term) {
        taxonomy_term_delete($term->tid);
    }
    drupal_set_message('All terms have been deleted from the '.$vocabulary->name.' vocabulary');
    drupal_goto('admin/structure/taxonomy/'.$vocabulary->machine_name);
}

0

ちょうど答えを完了するために、これを正確に行うモジュールがあります。これは、taxonomy_delete_all_termsモジュールです。私はそれを使用し、それは動作します。

分類語彙が非常に多いサイトでは、用語削除要求がタイムアウトするため、語彙を削除できない場合があります。削除トランザクションが完了する前にそれが発生すると、トランザクションはロールバックされ、削除される条件はまったくなくなります。


0

私の答えは、元の質問に接線的に関連しています。kenorbの答えに基づいて、サイトのすべての語彙をクリーンアップしたい場合は、以下を実行できます。

drush -v eval '$vocabularies = taxonomy_get_vocabularies(); foreach($vocabularies as $vocabulary) { foreach(taxonomy_get_tree($vocabulary->vid) as $term) { taxonomy_term_delete($term->tid);}}'

0

@texas_broniusが言ったように、devel generateが有効になっている場合はそれを使用できますが、さらに一歩進んで、drushもインストールされている場合は、次のコマンドを使用します。

drush generate-terms [vocabulary_machine_name] 0 --kill

そして[vocabulary_machine_name]をあなたの語彙のマシン名に置き換えてください。「0」は追加する用語の数を示し、「-kill」は現在そこにある用語を削除します。

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