Respuestas:
Hay un módulo para eso (TM).
Ver eliminación masiva .
Eso usará la API de Batch para eliminar los nodos para evitar problemas de tiempo de espera o memoria al eliminar miles de nodos con una sola llamada a node_delete_multiple ().
Bulk Delete es un módulo abandonado. Ver alternativas:
Mirando el módulo Devel Generate en busca de inspiración, aquí está su función "matar contenido" devel_generate_content_kill
:
function devel_generate_content_kill($values) { $results = db_select('node', 'n') ->fields('n', array('nid')) ->condition('type', $values['node_types'], 'IN') ->execute(); foreach ($results as $result) { $nids[] = $result->nid; } if (!empty($nids)) { node_delete_multiple($nids); drupal_set_message(t('Deleted %count nodes.', array('%count' => count($nids)))); } }
Por lo tanto, intentaría usar Devel Generate para eliminar todos los nodos pero no crear ninguno nuevo, o usar example.com/devel/php para llamar devel_generate_content_kill(array('node_types' => array('my_node_type')));
directamente.
En Drupal 8, una forma es usar el método entityQuery () con el método EntityStorageInterface :: delete () :
$result = \Drupal::entityQuery("node")
->condition("type", "YOUR_CONTENT_TYPE_NAME")
// If the update is being executed via drush entityQuery will only
// return the content uid 0 have access to. To return all set
// accessCheck to false since it defaults to TRUE.
->accessCheck(FALSE)
->execute();
$storage_handler = \Drupal::entityTypeManager()->getStorage("node");
$entities = $storage_handler->loadMultiple($result);
$storage_handler->delete($entities);
Si necesita aplicar otros filtros / condiciones, puede consultar la página de interfaz QueryInterface
EDITAR (de otra manera, gracias a @ 4k4 ):
$storage_handler = \Drupal::entityTypeManager()->getStorage("node");
$entities = $storage_handler->loadByProperties(["type" => "YOUR_CONTENT_TYPE_NAME"]);
$storage_handler->delete($entities);
Si desea probar el código, puede usar:
drush php-eval '$storage_handler = \Drupal::entityTypeManager()->getStorage("node"); $entities = $storage_handler->loadByProperties(["type" => "article"]); $storage_handler->delete($entities);'
Esto eliminará todos tus artículos.
$entities = $storage_handler->loadByProperties(['type' => 'YOUR_CONTENT_TYPE_NAME']);
entityQuery
, debe configurarlo accessCheck
en la declaración. De lo contrario, si lo ejecuta en drush, de forma predeterminada, accessCheck se establece en verdadero y no se devolverá ningún nodo al que uid 0 no tenga acceso.
Si desea hacerlo únicamente a través de la interfaz de usuario, puede usar el módulo devel_generate.
De esta manera, no se generarán nodos y se eliminarán todos los nodos de los tipos seleccionados.
Cree un archivo con el código siguiente en la raíz de la instalación de drupal y ejecute el archivo.
<?php
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
$aquery= db_query("SELECT nid FROM {node} AS n WHERE n.type = 'company'");
while ($row = db_fetch_object($aquery)) {
node_delete($row->nid);
}
?>
Puede hacer esto en Drupal 7 usando la parte Ejecutar código PHP del módulo Devel ingresando:
$result= db_query("SELECT nid FROM {node} AS n WHERE n.type = 'TYPE'");
foreach ($result as $record) {
node_delete($record->nid);
}
Haga esto en la terminal, si usa Drush y borra todo el módulo:
drush delete-all [content-type-machine-name]
Examples:
drush delete-all article Delect all article nodes.
drush delete-all all Delete nodes of all types.
drush delete-all --reset Delete nodes of all types, and reset node, revision and comment counters.
drush delete-all users Delete users.
Options:
--reset Reset counter for node, revision and comment tables.
--roles pick roles
Views Bulk Operations proporciona una pantalla de administración de nodos configurable y habilitada para BatchAPI que permite filtrar por tipo, seleccionar todos los nodos que coincidan con sus criterios de búsqueda, etc.
Esa es mi solución práctica en Drupal 6: además de la eliminación por lotes, puede editar en masa los nodos y hacer muchas otras cosas.
Parece que la versión Drupal 7 aún no está lista, pero estaría viendo ese módulo para una versión D7.
Otro fragmento es:
$query = db_query("SELECT n.nid FROM {node} n WHERE n.type = 'TO_BE_DELETED'");
while ($n = db_fetch_object($query))
{
node_delete($n->nid);
}
donde TO_BE_DELETED
es el tipo de contenido que se eliminará.
db_delete('node')
Con el módulo Devel, usando drush:
drush genc 0 --types=article --kill
O en la interfaz de usuario como se explica aquí: http://befused.com/drupal/delete-nodes-devel
devel_generate
que debe habilitarse. Y para múltiples tipos esdrush genc 0 --kill --types="article, page"
Uso Delete all module, funciona bien con D8 y proporciona comandos drush muy útiles. Por ejemplo, para eliminar todo el article
contenido del tipo de contenido:
drush delete-all article
Puede intentar Eliminar todo el módulo, vaya a 'admin / content / delete_content' y se le presentará un formulario para eliminar el contenido que pertenece a ciertos tipos de contenido.
Saludos
Si tiene habilitado el módulo Migrate, puede usar:
$ drush migrate-wipe <content-type>
Consulte Comandos de migración típicos con Drush .
Este módulo se utiliza para eliminar todo el contenido y / o usuarios de un sitio. Esta es principalmente una herramienta de desarrollo, que puede ser útil en varios casos
https://www.drupal.org/project/delete_all
así como el módulo Bulk Delete eliminará todos los nodos de un determinado tipo de nodo utilizando la API por lotes. Se recomienda utilizar el módulo de Operaciones por lotes de vistas (VBO) para una pequeña cantidad de nodos. Pero si tiene que eliminar 10.000 nodos, este módulo podría ser una mejor opción.
Eliminar todos los nodos del tipo de contenido mediante programación aquí hay una función auxiliar:
function _delete_all_nodes_of_type($type = '') {
// Return all nids of nodes of type.
$nids = db_select('node', 'n')
->fields('n', array('nid'))
->condition('n.type', $type)
->execute()
->fetchCol(); // returns an indexed array
if (!empty($nids)) {
node_delete_multiple($nids);
drupal_set_message(format_plural(count($nids), count($nids) . ' node Deleted.', count($nids) . ' nodes Deleted.'));
}
}
Terminé usando db_delete , no se requieren módulos:
<?php
db_delete('node')
->condition('type', 'MY_CONTENT_TYPE')
->execute();
?>
Editar / Advertencia: Vea el comentario de Berdir a continuación. Este método no limpia todos los datos relacionados con los nodos.
Si no desea codificar, puede probar este módulo, https://drupal.org/project/total_control
Simplemente vaya a Panel -> Contenido, seleccione todo el contenido (puede filtrar por tipo de contenido), luego seleccione "Eliminar elemento"