Como posso excluir um nó após, por exemplo, 2 semanas após a sua criação?
15
Se você está procurando uma solução centrada no desenvolvedor, pode invocar hook_cron()
um módulo personalizado para limpar os nós antigos:
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();
}
}
Baseado na resposta de Shawn Conn, aqui está a solução completa para iniciantes:
Crie um arquivo na pasta que você acabou de criar chamada: "delete_old_nodes.info.yml" e cole este código nele:
Crie um arquivo chamado "delete_old_nodes.module" e coloque este código nele:
Limpe o cache e navegue até a página dos módulos - (yoursite.com/admin/modules) - e ative o módulo (pesquisando "excluir nós antigos", clique na caixa de seleção com o nome dos módulos e clique em salvar).
Feito! Sempre que você executar o cron, os nós / páginas que foram publicados -2 semanas, ou o que você tiver, a partir de agora serão excluídos.
Nota: Para agendar a execução do cron, acesse yoursite.com/admin/config/system/cron
Teste:
Crie um nó e altere a data de publicação, normalmente na barra lateral direita, para -2 semanas ou o que você tiver. Execute manualmente o cron em yoursite.com/admin/config/system/cron e você não poderá encontrar seu nó.
fonte
Eu usaria uma
hook_cron()
implementação também, mas usando o código a seguir.O código que eu usei para excluir os nós é aquele que a mensagem de descontinuação
entity_delete_multiple()
sugere usar.Também usei uma chamada para
accessCheck(FALSE)
evitar que a consulta da entidade retorne apenas os nós aos quais o usuário anônimo tem acesso. (Tarefas Cron executadas como usuário anônimo.)Se houver a possibilidade de excluir os nós em excesso, eu limitaria o número de nós excluídos sempre que as tarefas cron forem executadas.
fonte
article
, obrigadohook_cron()
implementação mostrada já faz isso, como é chamadorange()
, de forma diferente da implementação anterior.range()
que eu entendo, vai limitar o número de nós excluídos cada vez tarefas cron. Mas digamos que eu tenha no site 30 nós de tipospage
earticle
com data de criação mais de 2 semanas atrás ... Como excluir apenas os nós do tipoarticle
sem excluir o nó do tipopage
? ... Desculpe minhas humildes habilidades de php, mas não pude ver essa implementação no código acima! GraçasEu tentaria fazê-lo da seguinte maneira:
Tentarei testá-lo quando tiver uma chance, porque não tenho muita certeza de quão fácil / possível será utilizar a visualização como aquela em 3., mas é definitivamente por aí que eu começaria. Obviamente, isso vem com a ressalva de que ele não excluirá os nós quando completarem exatamente 2 semanas de idade, mas dependerá de quando o Cron for executado no seu sistema; mas, suponho que dentro de três horas ou mais ainda seja suficiente.
(Eu só notei que isso era para o D8; acho que o processo ainda está bom.)
fonte