WordPress bietet verschiedene Möglichkeiten an, Bilder mit PHP zur WordPress Mediathek hinzuzufügen. Zwei Varianten möchte ich euch heute vorstellen, media_handle_sideload und wp_insert_attachment.
wp_insert_attachment #
Das folgende Beispiel zeigt dir, wie du mit PHP und wp_insert_attachment Bilder in die WordPress Mediathek einfügen kannst.
/**
* Hinzufügen von einem Bild zur WordPress Mediathek und anlegen aller dazugehörigen Bildgrößen
*
* @param string $path_to_file Der absolute Pfad zum Bild, welches zur Mediathek hinzugefügt werden soll, z.B.: /wp-content/uploads/bild1.jpg
* @param string $post_title Der Titel für das Bild
* @param int &$attachment_id Wenn angegeben, wird die ID des Bildes nach dem erfolgreichen anlegen in dieser Variable gespeichert.
*
* @return bool Gibt true zurück, wenn das Bild erfolgreich angelegt wurde. Andernfalls wird false zurückgegeben.
*/
function addImageToWordPressMediaLibrary(string $path_to_file, string $post_title, &$attachment_id = null): bool{
/**
* Mime Type der Datei von WordPress bestimmen lassen
*/
$filetype = wp_check_filetype(basename($path_to_file));
$attachment = array(
'post_mime_type' => $filetype['type'],
'post_title' => sanitize_title($post_title),
'post_content' => '',
'post_status' => 'inherit'
);
/**
* Post erstellen lassen
*/
$attachment_id = wp_insert_attachment($attachment, $path_to_file);
if(!is_numeric($attachment_id)){
return false;
}
/**
* Zusätzliche Bildgrößen anlegen lassen und für das Bild hinterlegen
*/
require_once( ABSPATH . 'wp-admin/includes/image.php' );
$attach_data = wp_generate_attachment_metadata( $attachment_id, $path_to_file );
wp_update_attachment_metadata( $attachment_id, $attach_data );
return true;
}
Über wp_insert_attachment wird das eigentliche Bild zur Mediathek hinzugefügt. Erst wenn dies erfolgreich war, werden über wp_generate_attachment_metadata die restlichen Bildformate erzeugt und anschließend über wp_update_attachment_metadata zum Bild (Post) hinzugefügt.
media_handle_sideload #
Alternativ lassen sich Bilder auch mit media_handle_sideload zur WordPress Mediathek hinzufügen. Diese Variante wird auch von der Mediathek im Backend deiner WordPress Webseite verwendet. Hier stehen dir weniger Einstellungsmöglichkeiten zur Verfügung, jedoch kannst du dir ein paar Zeilen Code sparen.
/**
* Hinzufügen von einem Bild zur WordPress Mediathek und anlegen aller dazugehörigen Bildgrößen
*
* @param string $path_to_file Der absolute Pfad zum Bild, welches zur Mediathek hinzugefügt werden soll, z.B.: /wp-content/uploads/bild1.jpg
* @param string $image Der Name des Bildes nach dem Kopieren, z.B. bild1.jpg
* @param int &$attachment_id Wenn angegeben, wird die ID des Bildes nach dem erfolgreichen anlegen in dieser Variable gespeichert.
*
* @return bool Gibt true zurück, wenn das Bild erfolgreich angelegt wurde. Andernfalls wird false zurückgegeben.
*/
function addImageToWordPressMediaLibrary(string $path_to_file, string $image, &$attachment_id = null): bool{
$file_array = ["name" => $image, "tmp_name" => $path_to_file];
// Bild in die Mediathek einfügen
$attachment_id = media_handle_sideload($file_array , 0, '');
if(!is_numeric($attachment_id )){
return false;
}
return true;
}
Beide Varianten benötigen, sofern die zusätzlichen Bildgrößen erstellt werden, einige Zeit um ein Bild hinzuzufügen.
Fazit #
Sowohl media_handle_sideload als auch wp_insert_attachment führen zum gewünschten Ergebnis. Die Funktion wp_insert_attachment ermöglicht es, Bilder auch ohne die vordefinierten Bildgrößen des Themes zur Mediathek hinzuzufügen. Erst durch den Aufruf von wp_generate_attachment_metadata und dem speichern der Daten durch wp_update_attachment_metadata werden die zusätzlichen Bildgrößen erstellt. Dies kann vorallem dann hilfreich sein, wenn mehrere Bilder auf einmal hinzugefügt werden sollen. Die verschiedenen Bildgrößen lassen sich dann später noch über Plugins wie RegenerateThumbnails hinzufügen.
Comments