ฉันมีคำศัพท์จำนวนมากและมุมมองของผู้ดูแลระบบยังไม่สามารถใช้กับอนุกรมวิธานได้ Taxonomy Managerก็ไม่ได้ทำเช่นนี้ มีตัวเลือกสำหรับการลบคำจำนวนมากหรือไม่
ฉันมีคำศัพท์จำนวนมากและมุมมองของผู้ดูแลระบบยังไม่สามารถใช้กับอนุกรมวิธานได้ Taxonomy Managerก็ไม่ได้ทำเช่นนี้ มีตัวเลือกสำหรับการลบคำจำนวนมากหรือไม่
คำตอบ:
ผู้จัดการ Taxonomy มีฟังก์ชั่นการลบจำนวนมากเพียงแค่เลือกคำศัพท์ทั้งหมดในคำศัพท์ของคุณแล้วคลิกปุ่ม 'ลบ':
ถ้าคุณต้องการที่จะทำมันโดยใช้โค้ดอย่างที่ควรจะเป็น:
$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 คือรหัสคำศัพท์ของคุณที่คุณควรเปลี่ยน
คุณสามารถรับ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')"
มุมมองผู้ดูแลระบบเพียงแสดงมุมมอง VBO ที่กำหนดรูปแบบล่วงหน้า VBO ใช้งานได้ดีกับข้อกำหนด (หรือประเภทเอนทิตีอื่น ๆ ) ติดตั้ง VBO ด้วยตัวคุณเองและสร้างมุมมองที่คุณต้องการจากนั้นใช้ VBO เพื่อลบข้อกำหนด
หากต้องการลบคำศัพท์อนุกรมวิธานทั้งหมดจำนวนมากภายในคำศัพท์ใน 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แล้วคุณสามารถใช้คำสั่งต่อไปนี้เพื่อลบคำศัพท์ทั้งหมดใน taxonomy * จากความสะดวกสบายของเชลล์:
$ drush Generic Terms TAXONOMY_MACHINE_NAME 0 - ฆ่า
* นี่ถือว่าคุณเปิดใช้งานโมดูล Devel Generate ซึ่งสามารถทำได้หากต้องการ:
$ drush en -y devel && drush en -y devel_generate
ฉันอยากจะแนะนำให้ใช้มุมมองของผู้ดูแลระบบกับVBOเพื่อรับมุมมองเพื่อแทนที่การแสดงเริ่มต้นของคำศัพท์อนุกรมวิธาน
สิ่งที่คุณต้องทำคือ:
ผมเคยเขียนเป็นเพียงแค่โพสต์บล็อกเกี่ยวกับวิธีการเพิ่มปุ่มลบแง่อนุกรมวิธานทั้งหมดที่นี่
เป็นหลัก:
ฉันใช้ปลั๊กอินโต้ตอบการยืนยัน jQuery Easyสำหรับสิ่งนี้ ก่อนดาวน์โหลดไลบรารี่จากที่นี่และใส่ไว้ในโฟลเดอร์ 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 ฉันใช้มันแล้วมันได้ผล
สำหรับเว็บไซต์ที่มีคำศัพท์อนุกรมวิธานขนาดใหญ่มากการลบคำศัพท์อาจเป็นไปไม่ได้เนื่องจากคำขอร้องให้ลบคำนั้นออก เมื่อสิ่งนั้นเกิดขึ้นก่อนที่การทำธุรกรรมการลบจะเสร็จสิ้นธุรกรรมจะถูกย้อนกลับทำให้ไม่ต้องลบข้อกำหนดใด ๆ
คำตอบของฉันเกี่ยวข้องกับคำถามดั้งเดิม อาคาร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);}}'
ตามที่ได้รับการกล่าวโดย @texas_bronius หากคุณเปิดใช้งาน devel create คุณสามารถใช้สิ่งนั้นได้ แต่เพิ่มอีกหนึ่งขั้นถ้าคุณติดตั้ง drush ด้วยฉันใช้คำสั่งนี้:
drush generate-terms [ศัพท์_machine_name] 0 --kill
และเพียงแทนที่ [dictionary_machine_name] ด้วยชื่อเครื่องของคำศัพท์ของคุณ "0" มีไว้สำหรับจำนวนคำที่จะเพิ่มและ "- ฆ่า" คือการลบคำที่อยู่ในนั้น