어휘에서 모든 용어를 삭제하는 방법 (대량 삭제)?


답변:


15

분류 관리자에는 대량 삭제 기능이 있습니다. 어휘에서 모든 용어를 선택하고 '삭제'버튼을 클릭하십시오.

여기에 이미지 설명을 입력하십시오

다음과 같은 코드를 사용하여 수행하려면 도움이되어야합니다.

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

Taxo Manager에는 대량 선택 옵션이 없지만 수백 개의 용어가있는 경우 각각 하나씩 확인해야합니다.
giorgio79

네, 실제로 성가신 일입니다. 기능 요청을했을 수도 있습니다
Clive

2
UI와 코드 메소드를 모두 추가해 주셔서 감사합니다! 항상 매우 유용 +1
Matt Fletcher

5
@ giorgio79 대부분의 최신 브라우저는 Shift + 클릭 확인란을 지원합니다. 확인란을 클릭 한 다음 같은 그룹의 다른 확인란을 Shift + 클릭하면이 두 항목 사이의 모든 확인란이 선택 / 선택 해제됩니다.
Елин Й.

26

컨텐츠 유형, 분류 어휘 등으로 컨텐츠를 대량 삭제하는 가장 좋아하는 방법은 http://drupal.org/project/devel 모듈을 사용합니다 . 어휘에서 모든 용어를 삭제하려면 다음을 수행하십시오.

  1. 개발 및 개발 생성 모듈 사용
  2. 개발> 용어 생성으로 이동
  3. 용어를 삭제하려는 어휘를 선택하십시오
  4. 생성 할 용어 수로 "0"을 입력하십시오.
  5. "새 용어를 생성하기 전에 기존 용어 삭제"를 확인하십시오.
  6. 제출을 클릭하십시오

Voila-- 빈 어휘, 그렇지 않으면 건드리지 않음.


모듈이 호출됩니다 (STABLE)가 생성
kenorb

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

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

당신이있는 경우에도 쉽게 Drush(STABLE)의 모듈이 설치, 당신은 당신의 쉘의 안락에서 분류 * 모든 조건을 삭제 대량으로 다음 명령을 사용할 수 있습니다 :

$ drush 생성 기간 TAXONOMY_MACHINE_NAME 0 --kill

* 이는 필요한 경우 수행 할 수있는 Devel Generate 모듈을 사용한다고 가정합니다.

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


drush에 대한 감사 생성-용어가 폭파했기 때문에 UI에서 사용할 때
GiorgosK

1

VBO 와 함께 관리자보기 를 사용하여 분류 용어의 기본 표시를 바꾸는보기를 얻는 것이 좋습니다 .

해야 할 일은 다음과 같습니다.

  1. 물론 해당 모듈을 활성화
  2. "관리 : 분류 용어"라는보기를 사용하십시오.
  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="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);
}

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 생성을 활성화 한 경우 사용할 수 있지만 한 단계 더 나아가서 더 러쉬가 설치되어 있으면이 명령을 사용합니다.

drush 생성 용어 [vocabulary_machine_name] 0 --kill

[vocabulary_machine_name]을 어휘의 기계 이름으로 바꾸십시오. "0"은 추가 할 용어 수이며 "--kill"은 현재 존재하는 용어를 제거하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.