私は語彙が多く、分類法では admin views はまだ機能しません。 Taxonomy Manager もこれを行いません。一括削除のオプションはありますか?
分類法マネージャーには一括削除機能があります。ボキャブラリーのすべての用語を選択して、[削除]ボタンをクリックするだけです。
あなたがそれをしたいなら、次のようなコードを使ってそれを助けたいでしょう:
$vocabulary = taxonomy_vocabulary_machine_name_load('my_custom_vocabulary');
foreach (taxonomy_get_tree($vocabulary->vid) as $term) {
taxonomy_term_delete($term->tid);
}
コンテンツタイプ、分類用語などでコンテンツを一括削除するお気に入りの方法は、 http://drupal.org/project/devel モジュールを利用します。語彙のすべての用語を削除する場合:
出来上がり-空の語彙、それ以外は手つかず。
次のコマンドを使用できます。
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'"
以下も参照してください。
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
管理ビューは、事前構成されたVBOビューを提供するだけです。 VBO自体は用語(またはその他のエンティティタイプ)で問題なく機能します。VBOを自分でインストールし、必要なビューを作成してから、VBOを使用して用語を削除します。
[〜#〜] vbo [〜#〜] と共に Admin Views を使用して、分類用語のデフォルト表示を置き換えるビューを取得することをお勧めします。
あなたがしなければならないことは次のとおりです:
私は ここにすべての分類用語を削除するボタンを追加する方法に関するブログ投稿 を書いたところです。
基本的に:
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);
}
私の答えは、元の質問に接線的に関連しています。 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);}}'
@texas_broniusが言ったように、devel generateが有効になっている場合はそれを使用できますが、さらに一歩進んで、drushもインストールされている場合は、次のコマンドを使用します。
drush generate-terms [vocabulary_machine_name] 0 --kill
そして[vocabulary_machine_name]をあなたの語彙のマシン名に置き換えてください。 「0」は追加する用語の数を示し、「-kill」は現在そこにある用語を削除します。
ちょうど答えを完了するために、これを正確に行うモジュールがあります。 taxonomy_delete_all_terms モジュールです。私はそれを使用し、それは動作します。
分類語彙が非常に多いサイトでは、用語削除要求がタイムアウトするため、語彙を削除できない場合があります。削除トランザクションが完了する前にそれが発生すると、トランザクションはロールバックされ、削除される条件はまったくなくなります。