WordPress: So fügst du Bilder mit PHP in die Mediathek ein

Marc Wag­ner

Okto­ber 22, 2022

3 min read|

Word­Press bie­tet ver­schie­de­ne Mög­lich­kei­ten an, Bil­der mit PHP zur Word­Press Media­thek hin­zu­zu­fü­gen. Zwei Vari­an­ten möch­te ich euch heu­te vor­stel­len, media_handle_sideload und wp_insert_attachment.

wp_insert_attachment #

Das fol­gen­de Bei­spiel zeigt dir, wie du mit PHP und wp_insert_attachment Bil­der in die Word­Press Media­thek ein­fü­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 eigent­li­che Bild zur Media­thek hin­zu­ge­fügt. Erst wenn dies erfolg­reich war, wer­den über wp_generate_attachment_metadata die rest­li­chen Bild­for­ma­te erzeugt und anschlie­ßend über wp_update_attachment_metadata zum Bild (Post) hin­zu­ge­fügt.

media_handle_sideload #

Alter­na­tiv las­sen sich Bil­der auch mit media_handle_sideload zur Word­Press Media­thek hin­zu­fü­gen. Die­se Vari­an­te wird auch von der Media­thek im Backend dei­ner Word­Press Web­sei­te ver­wen­det. Hier ste­hen dir weni­ger Ein­stel­lungs­mög­lich­kei­ten zur Ver­fü­gung, jedoch kannst du dir ein paar Zei­len Code spa­ren.

/**
 * 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;
}

Bei­de Vari­an­ten benö­ti­gen, sofern die zusätz­li­chen Bild­grö­ßen erstellt wer­den, eini­ge Zeit um ein Bild hin­zu­zu­fü­gen.

Fazit #

Sowohl media_handle_sideload als auch wp_insert_attachment füh­ren zum gewünsch­ten Ergeb­nis. Die Funk­ti­on wp_insert_attachment ermög­licht es, Bil­der auch ohne die vor­de­fi­nier­ten Bild­grö­ßen des The­mes zur Media­thek hin­zu­zu­fü­gen. Erst durch den Auf­ruf von wp_generate_attachment_metadata und dem spei­chern der Daten durch wp_update_attachment_metadata wer­den die zusätz­li­chen Bild­grö­ßen erstellt. Dies kann vor­al­lem dann hilf­reich sein, wenn meh­re­re Bil­der auf ein­mal hin­zu­ge­fügt wer­den sol­len. Die ver­schie­de­nen Bild­grö­ßen las­sen sich dann spä­ter noch über Plug­ins wie Rege­ne­ra­te­T­h­umb­nails hin­zu­fü­gen.

88e86fcb816eff22bc917094df2862d8dd5c0e978b333e6dd5f36f808990c261 96

Arti­kel von:

Marc Wag­ner

Hal­lo, Marc hier. Ich bin der Grün­der von Forge12 Inter­ac­ti­ve und bereits seit über 20 Jah­ren lei­den­schaft­lich dabei Web­sei­ten, Online­shops, Anwen­dun­gen und SaaS-Lösun­gen für Unter­neh­men zu ent­wi­ckeln. Vor der Grün­dung habe ich bereits in Bör­sen notier­ten Unter­neh­men gear­bei­tet und mir aller­lei Wis­sen ange­eig­net. Die­ses Wis­sen möch­te ich nun an mei­ne Kun­den wei­ter­ge­ben.

Hast du eine Fra­ge? Hin­ter­lass bit­te einen Kom­men­tar