Comment supprimer un nœud après, par exemple, 2 semaines de création?
14
Si vous recherchez une solution centrée sur le développeur, vous pouvez invoquer hook_cron()
un module personnalisé pour nettoyer les anciens nœuds:
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();
}
}
Basé sur la réponse de Shawn Conn, voici la solution complète pour les novices:
Créez un fichier dans le dossier que vous venez de créer appelé: "delete_old_nodes.info.yml" et collez-y ce code:
Créez un fichier appelé "delete_old_nodes.module" et mettez-y ce code:
Vider le cache, puis accédez à la page des modules - (yoursite.com/admin/modules) - et activez votre module, (en recherchant "supprimer les anciens nœuds", cochez la case par le nom des modules et cliquez sur enregistrer).
Terminé! Chaque fois que vous exécutez cron, les nœuds / pages qui ont été publiés -2 semaines, ou quoi que ce soit, à partir de maintenant seront supprimés.
Remarque: Pour planifier l'exécution de cron, accédez à votresite.com/admin/config/system/cron
Essai:
Créez un nœud et modifiez la date de publication, normalement dans la barre latérale droite, à -2 semaines ou autre. Exécutez manuellement cron sur yoursite.com/admin/config/system/cron et vous ne devriez pas pouvoir trouver votre nœud.
la source
J'utiliserais également une
hook_cron()
implémentation, mais en utilisant le code suivant.Le code que j'ai utilisé pour supprimer les nœuds est celui que le message de dépréciation
entity_delete_multiple()
suggère d'utiliser.J'ai également utilisé un appel à
accessCheck(FALSE)
pour éviter que la requête d'entité renvoie uniquement les nœuds auxquels l'utilisateur anonyme a accès. (Les tâches Cron s'exécutent en tant qu'utilisateur anonyme.)S'il y a alors la possibilité que les nœuds à supprimer soient trop nombreux, je limiterais le nombre de nœuds supprimés à chaque exécution des tâches cron.
la source
article
, mercihook_cron()
implémentation montrée le fait déjà, comme elle l'appellerange()
, différemment de l'implémentation précédente.range()
je comprends bien, va limiter le nombre de noeuds supprimés chaque tâches cron exécution. Mais disons que j'ai sur le site 30 nœuds de typespage
&article
avec date de création il y a plus de 2 semaines ... Comment supprimer uniquement les nœuds de typearticle
sans supprimer le nœud de typepage
? ... Excusez mes humbles compétences en php mais je n'ai pas pu voir une telle implémentation dans le code ci-dessus! MerciJ'essaierais de le faire comme tel:
J'essaierai de le tester quand j'en aurai l'occasion, parce que je ne suis pas entièrement sûr de la facilité / possibilité d'utiliser la vue comme celle-ci en 3., mais c'est définitivement par là que je commencerais. Bien sûr, cela vient avec la mise en garde qu'il ne supprimera pas les nœuds lorsqu'ils auront exactement 2 semaines, mais dépendra du moment où Cron s'exécute sur votre système; mais, je suppose que dans les 3 heures environ, c'est encore suffisant.
(Je viens juste de remarquer que c'était pour D8; je pense que le processus est toujours solide.)
la source