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

Hi Marc here. I’m the foun­der of Forge12 Inter­ac­ti­ve and have been pas­sio­na­te about buil­ding web­sites, online stores, appli­ca­ti­ons and SaaS solu­ti­ons for busi­nesses for over 20 years. Befo­re foun­ding the com­pa­ny, I alre­a­dy work­ed in publicly lis­ted com­pa­nies and acqui­red all kinds of know­ledge. Now I want to pass this know­ledge on to my cus­to­mers.

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