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.

Wie Forge12 mit solchen Themen arbeitet

Forge12 betreibt und ver­ant­wor­tet umsatz­kri­ti­sche Word­Press- und Woo­Com­mer­ce-Sys­te­me im lau­fen­den Betrieb. Bevor wir Sys­te­me über­neh­men oder wei­ter­ent­wi­ckeln, ana­ly­sie­ren wir sie voll­stän­dig – tech­nisch, struk­tu­rell und betrieb­lich. Das Sys­tem Audit ist der Ein­stiegs­punkt für jede Zusam­men­ar­beit.

88e86fcb816eff22bc917094df2862d8dd5c0e978b333e6dd5f36f808990c261 96

Arti­kel von:

Marc Wag­ner

Marc Wag­ner ist Grün­der der Forge12 Inter­ac­ti­ve GmbH und ver­ant­wort­lich für Betrieb, Absi­che­rung und Wei­ter­ent­wick­lung umsatz­kri­ti­scher Word­Press- und Woo­Com­mer­ce-Sys­te­me.

Seit über 20 Jah­ren arbei­tet er an Web­sites, Online-Shops und indi­vi­du­el­len Soft­ware­lö­sun­gen – vom Mit­tel­stand bis zu Struk­tu­ren bör­sen­no­tier­ter Unter­neh­men. Sein Fokus liegt nicht auf Pro­jek­ten, son­dern auf dau­er­haf­tem Betrieb: sta­bi­le Sys­te­me, kla­re Ver­ant­wort­lich­kei­ten und tech­ni­sche Ent­schei­dun­gen mit wirt­schaft­li­cher Kon­se­quenz.

Bei Forge12 beglei­tet er Unter­neh­men, die ihre Sys­te­me nicht nur bau­en, son­dern lang­fris­tig sicher betrei­ben und auto­ma­ti­sie­ren wol­len.

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