Удалить все ноды определённого типа

Опубликовано 2014.06.19

Если у вас не стоит модуль VBO, а потребность удалить большое количество нод есть - то можно использовать совсем маленький кусок кода. Можно даже не создавать модуль, а прогнать его через Devel. Например, мне нужно удалить все материалы типа "auto_part" Код выглядит так:
  1. $nids = array();
  2. $q = db_select('node', 'n')->condition('n.type', 'auto_part')->fields('n', array('nid'))->execute();
  3. while($r = $q->fetchAssoc()) {
  4. $nids[] = $r['nid'];
  5. }
  6. node_delete_multiple($nids);
В сети распространён пример, когда в цикле много раз дёргается функция node_delete. Можете дёргать её 100500 раз. Но если нод у вас очень много-сайт загнётся. С node_delete_multiple такого не происходит. Для удаления товаров commerce можно использовать такой код:
  1. $ids = db_select('commerce_product', 'p')
  2. ->fields('p', array('product_id'))
  3. ->execute()
  4. ->fetchCol();
  5. commerce_product_delete_multiple($ids);