Fehler: Löschen der Datei und erneutes Hochladen derselben Datei platziert die Datei in einem alten Monatsordner

Dies ist ein Problem mit der monatlichen Organisation von Mediendateien von wordpress.

So erstellen Sie das Problem erneut:

  1. Löschen Sie eine Bilddatei aus einem vorherigen Monat
  2. Laden Sie die gleiche Bilddatei hoch (gleicher Name)
  3. Die neu hochgeladene Datei wird im ursprünglichen Ordner gespeichert und nicht im aktuellen Monat.

Dies ist ein Problem für mich, weil das Amazon S3-Plugin (code.google.com/p/wordpress-s3/), mit dem ich meine Bilder auf s3 hosste, die neu hochgeladene Datei im aktuellen Monat ablegt, also die Datei auf s3 befindet sich an einem anderen Ort als auf dem WordPress-Server.

Hat jemand Erfahrung mit diesem “Bug”? Welches ist das richtige Verhalten, das von WordPress oder das s3-Plugin?

Vielen Dank!


Einige Klarstellungen:

Wie es aussieht ist, dass das s3 plugin und wordpress bei der Erstellung monatlicher Upload-Ordner NICHT parallel funktionieren.

s3 verwendet immer den aktuellen Monat. Mit anderen Worten, unabhängig vom Veröffentlichungsdatum des Posts, wird der Upload immer in den Ordner des aktuellen Monats gestellt (dh wenn das heutige Datum 2012 ist, lade ich ein Bild hoch und es geht an s3bucket / uploads / 2012/05 /)

Im Gegensatz dazu scheint WordPress die Bilder im Ordner basierend auf dem Datum der ursprünglichen Erstellung des Posts zu platzieren. Also, wenn Sie einen Beitrag im Februar als Entwurf speichern, dann fügen Sie Bilder im Mai, dann veröffentlichen Sie es, in S3 Ihre Bilder werden in 2012/05 sein, während auf Ihrem regulären Server werden sie in 2012/02 sein. Dies ist ein ernstes Problem für mich aus vielen Gründen, die zu komplex sind, um hieran heranzukommen, aber es ist trotzdem ein ernstes Problem.

Solutions Collecting From Web of "Fehler: Löschen der Datei und erneutes Hochladen derselben Datei platziert die Datei in einem alten Monatsordner"

Etwas, das Sie ausprobieren können, aber ich habe es nicht gründlich getestet und Sie müssen einige QA durchführen, um sicherzustellen, dass es sich nicht ausbreitet und irgendetwas anderes beeinflusst. Erläuterung:

Die function, die Pfade zum Upload-Verzeichnis zurückgibt, heißt wp_upload_dir (). Es wird an einer Reihe von Orten (und von vielen Plugins) verwendet, um einen Pfad zum Upload-Verzeichnis zu generieren. Es akzeptiert einen Parameter namens time, der (wenn er übergeben wird) bestimmt, welches Jahr / Monat in der Verzeichnisstruktur verwendet wird.

Beim Hochladen von einem Post gibt es leider keine Möglichkeit, diese “Zeit” zu filtern. Die function, die das Hochladen durchführt (genannt media_handle_upload (), bin ziemlich sicher), verwendet immer das Veröffentlichungsdatum des Posts, wenn Medien von einem Post-Bearbeitungsbildschirm hochgeladen werden. Es verwendet nur die aktuelle Zeit, wenn der Upload keinem Post zugeordnet ist. Keine Filter dort.

Aber! Die function wp_upload_dir () hat einen Filter, den Sie verwenden können, namens “upload_dir”. Es filtert ein Array, das alle Teile des generierten Verzeichnisses enthält. Eines der Array-Elemente heißt “subdir” und enthält gegebenenfalls den Jahr / Monat-Teil des Pfads. Sie können diesen Filter verwenden, um zu überprüfen, ob das Unterverzeichnis nicht leer ist. Wenn dies der Fall ist, ersetzen Sie dessen Wert durch das aktuelle Jahr / Monat.

Das Risiko besteht darin, dass Sie nicht den Kontext angeben können, in dem wp_upload_dir aufgerufen wird, und Sie wetten, dass keine anderen functionen den time-Parameter tatsächlich so verwenden, dass er bricht. Ich habe mich kurz im core umgesehen, und der einzige Ort, an dem ich ihn benutze, ist die function wp_upload_bits, und ich bin mir nicht sicher, wofür das genau ist. In jedem Fall würde ich vermuten, dass es nur bei tatsächlichen Datei-Uploads aufgerufen wird, also sind Sie wahrscheinlich dort gut. Aber Sie sollten gründlich mit den Plugins testen, die Sie installiert haben.

Code würde ungefähr so ​​aussehen:

function wpsx_53067_filter_upload_dir($arr) { if(isset($arr['subdir']) && !empty($arr['subdir'])) { // The existing dir, for reference $old_dir = $arr['subdir']; // Your new dir (you could edit this to grab the current year/month) $new_dir = '/any-new-dir-you-like'; // Update the array. Need to update the subdir, path and url items (they all contain the full path) $arr['subdir'] = $new_dir; $arr['path'] = str_replace($old_dir, $new_dir, $arr['path']); $arr['url'] = str_replace($old_dir, $new_dir, $arr['url']); } return $arr; } add_filter('upload_dir', 'wpsx_53067_filter_upload_dir');