Wie kann ich einen Knoten löschen, nachdem er beispielsweise 2 Wochen erstellt wurde?
15
Wenn Sie eine entwicklerorientierte Lösung suchen, können Sie hook_cron()
in einem benutzerdefinierten Modul alte Knoten bereinigen:
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();
}
}
Basierend auf Shawn Conns Antwort ist hier die vollständige Lösung für Anfänger:
Erstellen Sie eine Datei in dem soeben erstellten Ordner "delete_old_nodes.info.yml" und fügen Sie diesen Code ein:
Erstellen Sie eine Datei mit dem Namen "delete_old_nodes.module" und fügen Sie diesen Code ein:
Cache leeren, dann zur Modulseite (yoursite.com/admin/modules) navigieren und das Modul aktivieren (indem Sie nach "Alte Knoten löschen" suchen, auf das Kontrollkästchen neben dem Modulnamen klicken und auf Speichern klicken).
Erledigt! Wann immer Sie cron ausführen, werden die Knoten / Seiten, die in -2 Wochen veröffentlicht wurden oder auf denen Sie sie haben, von nun an gelöscht.
Hinweis: Um zu planen, wann cron ausgeführt wird, rufen Sie yoursite.com/admin/config/system/cron auf
Testen:
Erstellen Sie einen Knoten und ändern Sie das Veröffentlichungsdatum, normalerweise in der rechten Seitenleiste, auf -2 Wochen oder wie auch immer. Führen Sie cron manuell unter yoursite.com/admin/config/system/cron aus, und Sie sollten Ihren Knoten nicht finden können.
quelle
Ich würde auch eine
hook_cron()
Implementierung verwenden, aber den folgenden Code verwenden.Der Code, den ich zum Löschen der Knoten verwendet habe, ist der, für den die
entity_delete_multiple()
Verfallsnachricht die Verwendung vorschlägt.Ich habe auch einen Aufruf verwendet, um
accessCheck(FALSE)
zu vermeiden, dass die Entitätsabfrage nur die Knoten zurückgibt, auf die der anonyme Benutzer Zugriff hat. (Cron-Tasks werden als anonymer Benutzer ausgeführt.)Wenn dann die Möglichkeit besteht, dass die zu löschenden Knoten zu groß sind, würde ich die Anzahl der Knoten begrenzen, die jedes Mal gelöscht werden, wenn Cron-Tasks ausgeführt werden.
quelle
article
kann. Vielen Dankhook_cron()
gezeigte Implementierung unterscheidet sich bereitsrange()
von der vorherigen Implementierung.range()
wie ich es verstehe, wird die Anzahl der Knoten begrenzen jedes Mal Cron - Tasks ausführen gelöscht. Angenommen, ich habe auf der Site 30 Typknotenpage
&article
mit Erstellungsdatum vor mehr als 2 Wochen ... Wie löschearticle
page
ich nur die Typknoten, ohne den Typknoten zu löschen ? ... Entschuldigen Sie meine bescheidenen PHP-Fähigkeiten, aber ich konnte eine solche Implementierung im obigen Code nicht sehen! Vielen DankIch würde versuchen, es als solches zu tun:
Ich werde versuchen, es zu testen, wenn ich die Gelegenheit dazu bekomme, da ich nicht ganz sicher bin, wie einfach / möglich es sein wird, die Ansicht in 3. so zu nutzen, aber das ist definitiv der Punkt, an dem ich anfangen würde. Dies ist natürlich mit dem Vorbehalt verbunden, dass Knoten nicht gelöscht werden, wenn sie GENAU 2 Wochen alt sind, sondern davon abhängen, wann Cron auf Ihrem System ausgeführt wird. aber ich nehme an, innerhalb von 3 stunden reicht das noch aus.
(Ich habe gerade erst gemerkt, dass dies für D8 war; ich denke, der Prozess ist immer noch gut.)
quelle