# Générer des images par API et les importer dans la médiathèque

> Appeler une API de génération d'images, télécharger le résultat avec media_sideload_image, gérer les métadonnées et les mentions d'origine obligatoires.

- Auteur : Clément Hadrot
- Publié le : 2023-09-18
- Mis à jour le : 2023-09-18
- Catégorie : IA &amp; MCP
- URL : https://wpmoderne.dev.wordpress-developpement.fr/ia-mcp/generer-images-api-mediatheque-wordpress/

## L’essentiel

- Téléchargement via media_sideload_image
- Métadonnées et mention d'origine obligatoires
- Toujours prévisualiser avant import définitif

Un client dans l'événementiel nous a demandé de pouvoir illustrer rapidement ses articles de blog sans dépendre à chaque fois d'une banque d'images payante ni d'un graphiste pour des visuels d'appoint. La génération d'images par API répondait au besoin, à condition de bien gérer un maillon technique précis : faire passer une image générée à distance jusque dans la médiathèque WordPress, avec ses métadonnées correctement renseignées.

Ce tutoriel ne traite pas la question des textes alternatifs, abordée séparément : il se concentre sur la chaîne complète, de l'appel à l'API de génération jusqu'à l'image effectivement disponible dans la médiathèque.

## Premier appel : générer l'image

L'appel à l'API de génération d'images renvoie soit une image encodée en base64, soit une URL temporaire vers le fichier généré, valable généralement une heure. On privilégie ce second format quand il est disponible, pour éviter de manipuler de gros volumes de données encodées côté PHP.

```
function wpm_generer_image( $prompt ) {
    $reponse = wp_remote_post( 'https://api.openai.com/v1/images/generations', array(
        'timeout' => 60,
        'headers' => array(
            'Authorization' => 'Bearer ' . WPM_LLM_API_KEY,
            'Content-Type'  => 'application/json',
        ),
        'body'    => wp_json_encode( array(
            'model'  => 'dall-e-3',
            'prompt' => $prompt,
            'size'   => '1024x1024',
            'n'      => 1,
        ) ),
    ) );

    if ( is_wp_error( $reponse ) ) {
        return $reponse;
    }

    $corps = json_decode( wp_remote_retrieve_body( $reponse ), true );
    return $corps['data'][0]['url'] ?? new WP_Error( 'wpm_image_manquante', 'Aucune image renvoyée.' );
}
```

## Second appel : rapatrier l'image dans la médiathèque

WordPress fournit une fonction précisément conçue pour ce cas d'usage : `media_sideload_image()`, qui télécharge un fichier distant, l'ajoute à la médiathèque et peut l'attacher directement à un article existant.

```
require_once ABSPATH . 'wp-admin/includes/media.php';
require_once ABSPATH . 'wp-admin/includes/file.php';
require_once ABSPATH . 'wp-admin/includes/image.php';

function wpm_importer_image_generee( $url_image, $post_id, $description ) {
    $id_media = media_sideload_image( $url_image, $post_id, $description, 'id' );

    if ( is_wp_error( $id_media ) ) {
        return $id_media;
    }

    update_post_meta( $id_media, '_wpm_origine', 'generation_ia' );
    update_post_meta( $id_media, '_wpm_prompt_generation', sanitize_text_field( $description ) );

    return $id_media;
}
```

> L'essentiel à retenir : Téléchargement via media_sideload_image ; Métadonnées et mention d'origine obligatoires ; Toujours prévisualiser avant import définitif

L'URL renvoyée par l'API de génération expirant rapidement, cet import doit se faire dans la foulée de la génération, sans mise en attente prolongée entre les deux appels.

## Journaliser l'origine pour retrouver les images générées

La métadonnée `_wpm_origine` ajoutée ci-dessus permet, plus tard, de filtrer la médiathèque pour retrouver toutes les images générées par IA, un besoin qui revient systématiquement dès qu'un client souhaite faire un état des lieux de ses visuels ou répondre à une question sur leur provenance.

```
function wpm_images_generees_ia() {
    return get_posts( array(
        'post_type'  => 'attachment',
        'meta_key'   => '_wpm_origine',
        'meta_value' => 'generation_ia',
        'numberposts' => -1,
    ) );
}
```

## Prévisualiser avant l'import définitif

Sur ce projet, nous avons ajouté une étape de prévisualisation dans l'éditeur, avec deux boutons distincts : « régénérer » et « importer dans la médiathèque ». Sans cette étape, la première version testée en interne important automatiquement chaque image générée a rapidement saturé la médiathèque d'essais non aboutis.

- L'image générée s'affiche d'abord dans un aperçu temporaire, sans import.
- Le rédacteur peut relancer la génération avec un prompt ajusté autant de fois que nécessaire.
- Seul un clic explicite déclenche `media_sideload_image()` et l'ajout réel à la médiathèque.

## La mention d'origine, une exigence contractuelle, pas un détail

Les conditions d'utilisation de la plupart des fournisseurs d'API de génération d'images imposent des règles précises sur les usages autorisés et parfois sur la mention de l'origine du visuel. Nous recommandons systématiquement de conserver, en base, la trace du prompt et du modèle utilisé pour chaque image, indépendamment de toute obligation légale : c'est aussi la seule façon de retrouver comment un visuel a été produit six mois plus tard.

> Une image générée sans trace de son prompt d'origine est une image qu'on ne pourra plus jamais reproduire ni justifier.

## Ce qu'il faut retenir

La chaîne technique tient en deux appels, mais sa fiabilité repose sur trois habitudes : ne jamais laisser traîner une URL d'image temporaire, toujours prévisualiser avant d'ajouter à la médiathèque, et toujours journaliser l'origine de chaque visuel généré, dans les métadonnées de l'attachement lui-même.
