it-swarm.com.de

die Verwendung von wp_insert_attachment () führt zu Anleitungen mit Dateinamen, die sich von der gleichen Datei unterscheiden, wenn sie über die Medienseite in admin hochgeladen werden

Ich versuche, ein Plugin zu erstellen, das im Rahmen seiner Aufgabe CSV-Dateien in die WordPress-Installation hochlädt. Ich entscheide mich für eine möglichst enge Integration mit WordPress-Funktionen und speichere die hochgeladene Datei im richtigen aktuellen WordPress-Ordner (mithilfe der Funktion wp_upload_dir ()).

Ich füge dann den Upload als Anhang in die Beitragstabelle ein, damit die Benutzer ihn über die Medienseite verwalten können. Dies geschieht mit der eingebauten Funktion wp_insert_attachment (). Hier scheinen die Dinge schief zu laufen.

Grundsätzlich enthalten die Dateinamen, die ich für die Funktion analysiere, Leerzeichen. Wenn ich mir jedoch die Werte für GUID in der Tabelle posts ansehe, wurden die Leerzeichen entfernt. Wenn ich dieselbe Datei über die WordPress-Medienseitenoberfläche hinzufüge, werden die Leerzeichen durch Bindestriche ersetzt. Ich verstehe, warum WordPress Bindestriche hinzufügt, um die Datei-URL in alten Browsern, die mit Leerzeichen nicht gut umgehen konnten, sicherer zu machen. Warum wird der Leerzeichen jedoch entfernt, wenn ich wp_insert_attachment analysiere?

Also zu bestätigen; Das Hochladen von "Work Spreadsheet.csv" über die WordPress-Oberfläche führt zu einem erwarteten GUID von

http://domain.com/wordpress/wp-content/uploads/2013/11/Work-Spreadsheet.csv

Allerdings über meinen Plugin-Code

http://domain.com/wordpress/wp-content/uploads/2013/11/WorkSpreadsheet.csv

Auch in der Tabelle wp_postmeta wird der Wert für den Metaschlüssel "_wp_attached_file" beim Hochladen über die WordPress-Oberfläche mit Bindestrichen und dem relativen Ordnerpfad 2013/11/Work-Spreadsheet.csv hinzugefügt

Wo wie beim Hochladen über meinen Code ist es ohne den Ordnerpfad und den Dateinamen unverändert von meinem Original: Work Spreadsheet.csv

Kann jemand helfen, warum dies auftreten könnte? Der Code, kurz bevor ich wp_insert_attachment () benutze, ist unten als Referenz angegeben. Ich habe es mit anderen Dateitypen wie Bildern versucht, falls es irgendetwas mit dem Hochladen von Textdateien zu tun hatte, aber die Ergebnisse sind die gleichen.

$attachment = array(
'guid' => $upload_dir_array['url'] . '/' . basename( $destination_name ), 
'post_mime_type' => $wp_filetype['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', basename($destination_name)),
'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment( $attachment, $destination_name );
// for the function wp_generate_attachment_metadata() to work
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
$attach_data = wp_generate_attachment_metadata($attach_id,$upload_dir.$destination_name );
wp_update_attachment_metadata( $attach_id, $attach_data );
1
AdamJones

Also habe ich das herausgefunden.

Die Funktion wp_insert_attachment () bereinigt die darin analysierten Dateinamen. Dabei wurden Leerzeichen in Dateinamen entfernt. Um dies zu vermeiden, habe ich vor dem Parsen der Dateinamen eine eigene Bereinigung durchgeführt (wobei immer noch WP Funktionen verwendet wurden).

Ich habe meine Dateien mit sanitize_file_name () umbenannt und dabei Bindestriche (was ich wirklich wollte) in alle Leerzeichen in den Namen eingefügt. Später im Code, wenn ich die Details zu wp_insert_attachment () analysiere, treten keine Änderungen der Dateinamen auf und sie bleiben bei den Bindestrichen.

1
AdamJones