Was es bedarf:
Um das Hinzufügen eines Attachments wie beim Upload in der WordPress Mediathek im Code nachzubilden, braucht es ein paar Kniffe. Man darf hier neben der eigentlichen Attachment Generierung nicht auf die weiteren Metadaten vergessen, die WordPress rund um Bilder erstellt!
Benutzt man den Medien-Uploader im WordPress-Backend, dann passieren mehrere Dinge, neben dem reinen Upload der Medien.
Wir wollen uns hier etwas auf Bilder konzentrieren, weil diese am Häufigsten verwendet werden und am Interessantesten sind um einen genaueren Blick darauf zu werfen!
Allseits bekannt ist der Medien-Uploader:
Beim Hochladen wird:
- Die Datei selbst hochgeladen und am Server gespeichert.
- Bei Bildern entsprechend verschiedene Bildergrößen, etwa für Thumbnails, generiert und gespeichert.
- Ein Attachment Post wird erstellt.
- eine gewisse Anzahl an Metadaten zu den Bildern in der Datenbank gespeichert.
Häufiger Fehler
Ein häufiger Fehler ist es daher, einfach nur das Attachments zu generieren nach dem Hochladen mittels wp_insert_attachment().
Also ein solches Konstrukt reicht nicht aus:
$attachment = array(
'guid' => $attachment_url,
'post_mime_type' => $type,
'post_title' => "Mein Attachment",
);
// attachment erstellen $attachment_id = wp_insert_attachment( $attachment, $file_dir );
Hier erstellen wir uns zwar den Attachment Post mit dem Link zum hochgeladenen Bild, vergessen aber ganz darauf die verschiedenen Bildgrößen zu erstellen und die Metadaten zu aktualisieren.
Entsprechend fällt auch auf, dass in der Mediathek das Vorschaubild nicht richtig angezeigt wird. Wir sehen hier nur den Platzhalter.
Wie gehts richtig?
Bildergrößen generieren und Metadaten aktualisieren!
Das kann mit den zwei Funktionen wp_generate_attachment_metadata() und wp_update_attachment_metadata() erreicht werden.
Das folgende Code-Konstrukt erstellt die verschiedenen Bildgrößen und aktualisiert die Metadaten.
require_once ABSPATH . 'wp-admin/includes/image.php';
$new_file_dir = wp_get_original_image_path( $attachment_id );
$attach_data = wp_generate_attachment_metadata( $attachment_id , $new_file_dir);
wp_update_attachment_metadata( $attachment_id , $attach_data );
Nun sieht man auch in der Mediathek entsprechend das Vorschau-Bild.
Auch die verschiedenen Bildgrößen sind am Server gespeichert.
Zusammenfassung
Neben der Attachment-Erstellung unbedingt auf die Bildergrößen und die Metadaten achten.
Hier der gesammelte Code zur Veranschaulichung:
$attachment = array(
'guid' => $attachment_url,
'post_mime_type' => $type,
'post_title' => "Mein Attachment",
);
// attachment erstellen
$attachment_id = wp_insert_attachment( $attachment, $file_dir );
require_once ABSPATH . ‚wp-admin/includes/image.php‘;
$new_file_dir = wp_get_original_image_path( $attachment_id );
$attach_data = wp_generate_attachment_metadata( $attachment_id , $new_file_dir);
wp_update_attachment_metadata( $attachment_id , $attach_data );