답변:
분류 관리자에는 대량 삭제 기능이 있습니다. 어휘에서 모든 용어를 선택하고 '삭제'버튼을 클릭하십시오.
다음과 같은 코드를 사용하여 수행하려면 도움이되어야합니다.
$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 모듈을 사용합니다 . 어휘에서 모든 용어를 삭제하려면 다음을 수행하십시오.
Voila-- 빈 어휘, 그렇지 않으면 건드리지 않음.
다음 명령을 사용할 수 있습니다.
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'"
또한보십시오:
drush sqlq "DELETE FROM taxonomy_term_data WHERE vid = (SELECT 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 과 (STABLE)의 모듈이 설치, 당신은 당신의 쉘의 안락에서 분류 * 모든 조건을 삭제 대량으로 다음 명령을 사용할 수 있습니다 :
$ drush 생성 기간 TAXONOMY_MACHINE_NAME 0 --kill
* 이는 필요한 경우 수행 할 수있는 Devel Generate 모듈을 사용한다고 가정합니다.
$ drush en -y devel && drush en -y devel_generate
방금 모든 분류 용어를 삭제하는 버튼을 추가하는 방법에 대한 블로그 게시물을 작성했습니다 .
본질적으로 :
이를 위해 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="https://drupal.stackexchange.com/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);
}
답을 완성하기 위해 정확히 이것을하는 모듈이 있습니다. 그것은이다 taxonomy_delete_all_terms의 모듈. 나는 그것을 사용했고 작동합니다.
분류 체계 어휘가 매우 큰 사이트의 경우 삭제 요청 시간이 초과되어 용어를 삭제하지 못할 수 있습니다. 삭제 트랜잭션이 완료되기 전에 이러한 상황이 발생하면 트랜잭션이 롤백되어 용어가 전혀 삭제되지 않습니다.