05. Januar 2010 ~ 16 Kommentare | ÄHNLICHE ARTIKEL

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 zu “WordPress-Trash ohne automatische Leerung”

  1. jens
    10. Januar 2010 um 19:48 Permalink

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

    - sind ein paar tausend jahre

    • Kenny
      10. Januar 2010 um 21:42 Permalink

      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.

      • Fragezeichen
        30. März 2010 um 14:13 Permalink

        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.

        • Kenny
          30. März 2010 um 16:51 Permalink

          Gegenfrage: Was spricht dagegen, es ordentlich zu machen?

          • jens
            31. März 2010 um 09:18 Permalink

            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 ;-)

            • Kenny
              31. März 2010 um 09:34 Permalink

              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.

              • jens
                31. März 2010 um 10:59 Permalink

                vieleicht ist das problem einfach nur warum sollte man artikel wegwerfen und dann nie löschen?

                • Kenny
                  31. März 2010 um 11:07 Permalink

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

  2. jens
    14. Januar 2010 um 00:48 Permalink

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

    • Kenny
      14. Januar 2010 um 09:50 Permalink

      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

  3. jens
    14. Januar 2010 um 09:52 Permalink

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

    • Kenny
      14. Januar 2010 um 17:53 Permalink

      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.

  4. jens
    31. März 2010 um 11:08 Permalink

    Nein!

  5. [...] formlar formuar formulr formula ofrmular fromular fomrular forumlar formluar formualr formulra ...WordPress-Trash ohne automatische Leerung | WeizenSpr.euWie ihr evtl. schon mitbekommen habt, enth¤lt WordPress seit der Version 2.9 einen [...]

  6. Bernecker1977
    19. April 2010 um 16:36 Permalink

    Vielen Dank,
    ich lösche sonst immer alles sofort aber nutze nun doch die Archivierungsfunktion :-)


Hinterlasse einen Kommentar

Dir stehen verschiedene Möglichkeiten zur Verfügung, um deinen Beitrag optisch zu gestalten. Möglichkeiten anzeigen

fett
[b]Text[/b]
blinkend
[blink]Text[/blink]
kursiv
[i]Text[/i]
überstrichen
[o]Text[/o]
durchgestrichen
[s]Text[/s]
runtergestellt
[sub]Text[/sub]
hochgestellt
[sup]Text[/sup]
unterstrichen
[u]Text[/u]
Farbe
[color=Farbe]Text[/color]
Schriftart
[font=Schriftart]Text[/font]
Größe
[size=Größe]Text[/size]
Mail-Adresse
[mail=Adresse]Beschreibung[/mail]
URL-Adresse
[url=Adresse]Beschreibung[/url]
Bild
[img=Adresse]Beschreibung[/img]


489
no-www.org extra-www.org
IPv6 ready XHTML 1.0 Transitional

Datenbank: 57 Abfragen | Generierung: 0,36429 Sekunden