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