WordPress-Trash ohne automatische Leerung

Wie ihr evtl. schon mitbekommen habt, enthält WordPress seit der Version 2.9 einen Papierkorb, in den "gelöschte" Artikel und Kommentare verschoben werden. Einträge, die im Papierkorb liegen, werden standardmäßig nach 30 Tagen gelöscht.

Die Anzahl der Tage, nach denen der Papierkorb geleert werden soll, kann mit Hilfe des Wertes EMPTY_TRASH_DAYS in der Datei wp-config.php beeinflusst werden. Der Wert "0" bedeutet in dem Fall, dass der Papierkorb komplett deaktiviert wird (wer den Papierkorb deaktiviert hat, sollte sich übrigens unbedingt WordPress 2.9.1 ansehen).

Ich persönlich finde den Papierkorb toll, mag es aber nicht, wenn Dinge von mir automatisch gelöscht werden. Deshalb habe ich mich durch den Quelltext der 2.9.1er Version gehangelt und geguckt, was zu tun ist, um dem ganzen Abhilfe zu schaffen. Glücklicherweise wird fast überall auf "EMPTY_TRASH_DAYS" bzw. "!EMPTY_TRASH_DAYS" geprüft, sodass nur wenige Änderungen nötig sind. :-)

Fangen wir mit der ersten an. In der Datei wp-includes/post.php finden wir in der Zeile 1178 eine Abfrage, die überprüft, ob statt wp_delete_post() (wo wir uns gerade befinden) nicht lieber wp_trash_post() aufgerufen werden sollte:

1
if ( !$force_delete && ( $post->post_type == 'post' || $post->post_type == 'page') && get_post_status( $postid ) != 'trash' && EMPTY_TRASH_DAYS > 0 )

Diese ändern wir nun so ab, dass sie dann wahr ist, sobald EMPTY_TRASH_DAYS gleich true ist - wir unterscheiden also nicht mehr zwischen positiven und negativen Werten:

1
if ( !$force_delete && ( $post->post_type == 'post' || $post->post_type == 'page') && get_post_status( $postid ) != 'trash' && EMPTY_TRASH_DAYS )



Eine ganz ähnliche Zeile gibt es auch in der Datei wp-includes/comment.php. Dort wird in Zeile 821 geprüft, ob statt wp_delete_comment() nicht lieber wp_trash_comment() aufgerufen werden sollte:

1
if (wp_get_comment_status($comment_id) != 'trash' && wp_get_comment_status($comment_id) != 'spam' && EMPTY_TRASH_DAYS > 0)

Auch diese ändern wir so ab, dass das Vorzeichen des Wertes EMPTY_TRASH_DAYS egal ist:

1
if (wp_get_comment_status($comment_id) != 'trash' && wp_get_comment_status($comment_id) != 'spam' && EMPTY_TRASH_DAYS )



Nun kommt noch eine Änderung in der Datei wp-includes/functions.php an die Reihe. In dieser beginnt ab Zeile 3531 die Funktion wp_scheduled_delete(). Diese ist dafür zuständig, dass nach der Anzahl der Tage, die in EMPTY_TRASH_DAYS angegeben ist, die entsprechenden Einträge im Papierkorb gelöscht werden. Dies können wir dadurch verhindern, indem wir gleich ganz am Anfang der Funktion folgenden Quelltext einfügen:

1
if (EMPTY_TRASH_DAYS < 0) { return; }

Damit sorgen wir dafür, dass die Funktion garnicht erst durchlaufen wird, wenn der Wert in EMPTY_TRASH_DAYS kleiner Null ist.


Der Wert EMPTY_TRASH_DAYS muss jetzt nur noch in der Datei wp-config.php entsprechend gesetzt werden:

1
define("EMPTY_TRASH_DAYS", -1);



Herzlichen Glückwunsch! Du hast gerade dein WordPress 2.9.1 so abgeändert, dass dein Papierkorb aktiv ist, dieser jedoch nicht nach einer bestimmten Anzahl an Tagen einfach geleert wird :D !
Ich hoffe, du wirst mit dieser Änderung genauso viel Spaß haben, wie ich.

Und nicht vergessen: Ich hafte nicht für Schäden an Software, Hardware oder für Vermögensschäden, die durch Anwendung dieser Änderungen entstanden sind oder entstehen könnten. ;-)


Manuelle Grüße

16 Kommentare » Schreibe einen Kommentar

  1. Pingback: fomular

  2. oh, kann es sein, dass es gar keine auswahlbox gibt, wo man 30 Tage zum Beispiel auswählwen kann?

    • Richtig. Das stellt man ausschließlich in der wp-config.php ein. Sollte dort nichts definiert sein, wird in der wp-settings.php automatisch ein Default von 30 Tagen gesetzt.

  3. naja such nach dem entsprechenden fomular und bearbeite es... füge ein neues option-element zum select-tag hinzu und fertig

    • Sei mir nicht boese, aber: Betreibst du ein eigenes WordPress 2.9(.1) und hast es so bereits ausprobiert? Ich habe - wie geschrieben - bereits durch den Quelltext geguckt, um eine Loesung fuer das Problem zu finden und verstehe ehrlich gesagt nicht, was ein Option-Tag bei irgendeinem Select-Tag bewirken soll? Evtl. koenntest du noch ein bisschen weiter ausfuehren, wie das verhindern soll, dass WordPress automatisch die geloeschten Artikel/Seiten/Kommentare/Medien nach ein paar Tagen automatisch loescht?

      P.S.: Nicht ueber die Umlaute wundern. Ich sitze gerade an einer Tastatur mit US-Layout und weiss nicht, wie ich damit deutsche Umlaute erzeuge. :D

  4. hättest auch einfach eine neue datumsoption hinzufügen können, zb Niemals

    - sind ein paar tausend jahre

    • Wie hätte ich denn eine "neue Datumsoption" hinzufügen sollen? Vor allem: Wäre das schneller zu implementieren gewesen? Bin der Meinung, dass die jetztige Lösung ziemlich einfach einzubauen ist.

      • Was hätte gegen den Eintrag

        define("EMPTY_TRASH_DAYS", 36500);

        in wp-config.php gesprochen? Das entspricht ca. 100 Jahren Verfallsdatum, NACHDEM die Daten im Papierkorb gelandet sind.

          • hast schon recht!
            aber am besten wäre es das ganze geschnippsel in ein plugin zu schnüren und es der comunity zur verfügung stellen ;-)

            • Als Plugin kann man das ganze nicht bereit stellen, da WordPress keine passenden Hooks anbietet, um das Verhalten der automatischen Leerung zu beeinflussen.

              Abgesehen davon kann hier jeder finden, wie die Leerung zu deaktivieren ist. Damit steht das Wissen der Community zur Verfügung.
              Ich habe auch schon versucht, die Einarbeitung der Änderung in offizielle Wege zu leiten: Bisher jedoch mit viel zu wenig Erfolg.

                • Sagt ja keiner, dass sie nie gelöscht werden. Aber ich entscheide lieber selber, wann ich mich entgültig von ihnen trenne.

Hinterlasse eine Antwort

Um Ihnen beim weiteren Kommentieren auf dieser Webseite die erneute Eingabe Ihrer Daten zu ersparen, wird beim Absenden Ihres Kommentars ein Cookie an Ihren Browser gesendet und von diesem gespeichert. Mit dem Absenden eines Kommentars auf dieser Webseite stimmen Sie der Speicherung und Übertragung dieses Cookies explizit zu.

Pflichtfelder sind mit * markiert.


Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>