web-dev-qa-db-ja.com

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

私は語彙が多く、分類法では admin views はまだ機能しません。 Taxonomy Manager もこれを行いません。一括削除のオプションはありますか?

10
giorgio79

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

enter image description here

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

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

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

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

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

26
texas-bronius

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

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'"

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

6
kenorb

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

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

$ drush generate-terms TAXONOMY_MACHINE_NAME 0 --kill

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

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

2
rjb

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

2
Bojan Zivanovic

[〜#〜] vbo [〜#〜] と共に Admin Views を使用して、分類用語のデフォルト表示を置き換えるビューを取得することをお勧めします。

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

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

Views Bulk Operations and Admin Views

1
Duncanmoo

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

基本的に:

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="/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);
}
1
Felix Eve

私の答えは、元の質問に接線的に関連しています。 kenorb's の回答に基づいて構築し、サイトのすべての語彙を整理したい場合は、以下を実行できます。

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
Screenack

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

drush generate-terms [vocabulary_machine_name] 0 --kill

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

0
ttamniwdoog

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

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

0