Me pregunto si Drush es capaz de eliminar nodos de un tipo de contenido dado.
Algo como: $ drush delete-node --type=MyContentType
Si no es posible, ¿puedo crear un método como ese?
Puede crear una función como la siguiente:
function MYMODULE_delete_all_the_things() {
$query = new EntityFieldQuery;
$result = $query->entityCondition('entity_type', 'node')
->propertyCondition('type', 'YOUR-CONTENT-TYPE')
->execute();
if (isset($result['node']) && count($result['node'])) {
$node_ids = array_keys($result['node']);
node_delete_multiple($node_ids);
}
}
Nota: También podría usar una SELECT
consulta simple , pero dado que está trabajando con entidades, parece más sensato / una práctica común usar EntityFieldQuery .
Esto también debería ser bastante fácil de cambiar o agregar argumentos. También puede ponerlo en un comando Drush con bastante facilidad: hay un ejemplo de cómo hacerlo en el repositorio Drush (consulte la sección Comandos en la parte inferior).
Instale el módulo de desarrollo y use drush para eliminar todos los nodos,
También puedes dar una opción de tipo,
fuente
devel_generate
módulo se incluye con devel, pero debe habilitarse condrush en devel_generate
genc normalmente se usa para crear nodos, por lo que el 0 0 al final le dice que no cree nada nuevo y --kill para eliminar lo que ya está allí.Supongo que puedes usar el siguiente comando
EDITAR: encontró un módulo que hace algo / relacionado con la pregunta
http://drupal.org/project/delete_all
Uso
Drush
drush delete-all
Ejemplo:
drush delete-all article
fuente
delete_all
aún no se ha transferido a Drupal 8 , pero la respuesta genc funciona.Algo como esto funcionaría (no probado):
Esto encontrará todos los nodos con el tipo de contenido
Annoucements
usandoEntityFieldQuery()
. Luego obtiene todo el$nids
resultado y los elimina usandonode_delete_multiple()
.Puede tomar este código, ponerlo en un archivo PHP separado y luego ejecutarlo con
drush scr
.El uso de la API garantizará que se activen todos los ganchos adecuados. Entre otras cosas, también eliminarán las revisiones de nodos y los datos de campo (y sus revisiones) para que no tenga datos huérfanos en la base de datos.
fuente
Hay algunas buenas ideas en este hilo. Si realmente no desea realizar ninguna programación y desea utilizar Drush, puede consultar el módulo Eliminar todo contribuido:
fuente
Drush 9
drush entity:delete node --bundle=my_content_type
fuente
VBO tiene integración Drush. Cree una vista VBO de nodos, ejecútelo a través de Drush (usando
drush vbo-execute
), pase el tipo de nodo como argumento.fuente
También puede crear un script drush (digamos que se llama "bulk_delete.php" y se coloca debajo de la carpeta raíz de Drupal):
Esta es absolutamente la forma más rápida de hacerlo: una consulta directa a la base de datos, utilizando la función db_delete de Drupal
Uso:
Doc: https://api.drupal.org/api/drupal/includes!database!database.inc/function/db_delete/7
Advertencia: este proceso no elimina los datos de sus campos. De todos modos, se puede aplicar el mismo proceso a estos campos (mirando la columna "paquete" de cada campo). Por ejemplo:
Donde "mycontenttype" es el utilizado en la primera consulta.
fuente
'nid' > 5000
?Drupal 7
Pruebe el siguiente one-liner, elimina todos los nodos MyContentType de Drupal:
O puede eliminar todas las entidades en función del nombre del tipo de entidad (por ejemplo, nodo):
Nota:
node
es el nombre de su tipo de entidad, puede cambiarlo si es necesario.Si obtiene errores de memoria o de tiempo de espera, puede agregar los siguientes conjuntos justo antes de
$res
:fuente
Para eliminar todos los nodos de un tipo de contenido en particular, puede intentar ejecutar el siguiente comando mediante drush:
Donde MyContentType es el nombre del Tipo de contenido de su máquina (por ejemplo, Página).
fuente
Para nodos individuales:
fuente
Actualizando la respuesta proporcionada por @kenorb.
En Drupal 8
fuente
Puedes usar
drush node_delete NID
para eliminar un nodo específico, pero si desea eliminar todos los nodos por tipo de contenido, creo que puede crear un plugin drush usando la API por lotes.fuente
También puede hacer esto con el módulo de desarrollo como se respondió en ¿Puedo eliminar nodos de un tipo de contenido determinado con Drush?
Instale el módulo de desarrollo y use drush para eliminar todos los nodos,
$ drush genc --kill 0 0
También puedes dar una opción de tipo,
$ drush genc --kill --types = artículo 0 0
fuente