という名前のDrushコマンドを作成できますvocabulary-clean
。という名前のモジュールを作成しdrush_taxonomy
、drush_taxonomy.drush.inc
ファイル内に次のコードを入力します。
<?php
/**
* @file
* Drush commands related to taxonomy.
*/
/**
* Implements hook_drush_command().
*/
function drush_taxonomy_drush_command() {
$items['vocabulary-clean'] = array(
'description' => dt("Delete all terms in a vocabulary."),
'aliases' => array('vc'),
'arguments' => array(
'name' => dt('The vocabulary names to clean.'),
),
'examples' => array(
'drush vocabulary-clean tags' => dt('Delete all the terms in tags vocabulary'),
'drush vocabulary-clean tags test' => dt('Delete all the terms in tags and test vocabularies'),
),
);
return $items;
}
/**
* Callback for the vocabulary clean command.
*/
function drush_drush_taxonomy_vocabulary_clean() {
$names = func_get_args();
if (!empty($names)) {
// Check for duplicate ids.
$test_names = array_unique($names);
if (count($test_names) != count($names)) {
drush_set_error('DRUSH_VOCABULARY_CLEAN_ERROR', dt('You have duplicate vocabulary names.'));
return;
}
//Searching the vocabularies in the site
$vocabulary_in_db = array_column(taxonomy_get_vocabularies(), 'machine_name');
$vocabulary_non_existent = array_diff($names, $vocabulary_in_db);
$vocabulary_existent = array_diff($names, $vocabulary_non_existent);
if(count($vocabulary_existent) == 0) {
drush_set_error('DRUSH_VOCABULARY_CLEAN_ERROR', dt("The desired vocabularies to clean doesn't exists."));
return;
}
if(count($vocabulary_non_existent)) {
drush_print(dt("Non-existent vocabularies:"));
drush_print(implode(' ', $vocabulary_non_existent));
}
foreach ($vocabulary_existent as $name) {
$vid = taxonomy_vocabulary_machine_name_load($name)->vid;
foreach(taxonomy_get_tree($vid) as $term) {
taxonomy_term_delete($term->tid);
}
}
drush_print(dt("Vocabularies cleaned:"));
drush_print(implode(' ', $vocabulary_existent));
}
else {
drush_set_error('DRUSH_VOCABULARY_CLEAN_ERROR', dt("You must enter at least one vocabulary name."));
}
}
モジュールをインストールし、実行drush cc drush
してDrushキャッシュをクリアし、次のようなコマンドを使用します。
drush vc tags
または
drush vocabulary-clean tags
コマンドに別のエイリアスを追加する場合は、次のように要素をaliases配列に追加します。
'aliases' => array('vc', 'voc-clean', 'clean'),
そして、あなたはこのコマンドを使うことができます:
drush vc tags
drush voc-clean tags
drush clean tags
常に出力は次のようになります。
Vocabularies cleaned:
tags