¿Cómo puedo eliminar un nodo después de, por ejemplo, 2 semanas que se ha creado?
14
Si está buscando una solución centrada en el desarrollador, puede invocar hook_cron()
en un módulo personalizado para limpiar nodos antiguos:
function MYMODULE_cron() {
// Other conditions can be altered/added as neeed
$query = \Drupal::entityQuery('node')
->condition('created', strtotime('-2 week'), '<=');
$nids = $query->execute();
foreach ($nids as $nid) {
$node = node_load($nid);
$node->delete();
}
}
Basado en la respuesta de Shawn Conn, aquí está la solución completa para los principiantes:
Cree un archivo en la carpeta que acaba de crear llamada: "delete_old_nodes.info.yml" y pegue este código en él:
Cree un archivo llamado "delete_old_nodes.module" y coloque este código en él:
Vacíe la memoria caché, luego navegue a la página de módulos - (yoursite.com/admin/modules) - y habilite su módulo, (buscando "eliminar nodos antiguos", haga clic en la casilla de verificación junto al nombre de los módulos y haga clic en guardar).
¡Hecho! Cada vez que ejecute cron, los nodos / páginas que se publicaron -2 semanas, o lo que sea que tenga, a partir de ahora se eliminarán.
Nota: para programar cuándo se ejecuta cron, vaya a yoursite.com/admin/config/system/cron
Pruebas:
Cree un nodo y cambie la fecha de publicación, normalmente en la barra lateral derecha, a -2 semanas o lo que sea que tenga. Ejecute cron manualmente en yoursite.com/admin/config/system/cron y no podrá encontrar su nodo.
fuente
También usaría una
hook_cron()
implementación, pero usando el siguiente código.El código que utilicé para eliminar los nodos es el que
entity_delete_multiple()
sugiere el mensaje de desaprobación .También utilicé una llamada para
accessCheck(FALSE)
evitar que la consulta de entidad devuelva solo los nodos a los que tiene acceso el usuario anónimo. (Las tareas de Cron se ejecutan como usuario anónimo).Si existe la posibilidad de que los nodos para eliminar sean demasiado, limitaría la cantidad de nodos eliminados cada vez que se ejecutan tareas cron.
fuente
article
Graciashook_cron()
implementación mostrada ya hace eso, como lo llamarange()
, de manera diferente a la implementación anterior.range()
tengo entendido, limitará la cantidad de nodos eliminados cada vez que se ejecutan tareas cron. Pero digamos que tengo en el sitio 30 nodos de tipospage
yarticle
con fecha de creación hace más de 2 semanas ... ¿Cómo eliminar solo los nodos de tipoarticle
sin eliminar el nodo de tipopage
? ... Disculpe mis humildes habilidades de php pero no pude ver tal implementación en el código anterior. GraciasIntentaría hacerlo como tal:
Intentaré probarlo cuando tenga la oportunidad, porque no estoy completamente seguro de lo fácil / posible que será utilizar la vista de esa manera en 3., pero definitivamente es ahí donde comenzaría. Por supuesto, esto viene con la advertencia de que no eliminará los nodos cuando tengan EXACTAMENTE 2 semanas de edad, sino que dependerá de cuándo Cron se ejecute en su sistema; pero, supongo que dentro de 3 horas más o menos sigue siendo suficiente.
(Solo me di cuenta de que esto era para D8; creo que el proceso todavía es sólido).
fuente