# Connecteur DeepL pour préparer un catalogue d’antiquités en brouillon

> Un snippet appelant l'API DeepL en tâche de fond pour préparer un brouillon de traduction de fiches d'antiquités, sans jamais publier automatiquement.

- Auteur : WordPress Développement
- Publié le : 2023-05-12
- Mis à jour le : 2023-05-12
- Catégorie : Multilingue
- URL : https://www.wpmoderne.fr/multilingue/connecteur-deepl-catalogue-antiquites-brouillon/

## L’essentiel

- Le brouillon reste toujours à l'état non publié
- Chaque appel API journalise son coût en caractères
- Les descriptions d'objets rares gardent leur vocabulaire spécialisé en relecture

`wp eval-file traduire-brouillon.php 342` : c'est la commande utilisée pour lancer, fiche par fiche, la préparation automatique de brouillons de traduction sur le catalogue d'un antiquaire vendant des meubles et objets d'art en France et en Belgique, avec une clientèle anglophone grandissante depuis l'ouverture d'une vitrine en ligne.

Le problème à résoudre : chaque fiche d'antiquité comporte une description riche en vocabulaire spécialisé (essences de bois, styles d'époque, techniques de restauration), que le propriétaire de la boutique voulait faire traduire par une intelligence artificielle en première passe, avant relecture humaine systématique. Cette recette ne traite pas de cette relecture finale, effectuée manuellement par le client lui-même : elle se concentre sur la préparation automatisée du brouillon.

## Le problème posé

Traduire manuellement plusieurs centaines de fiches existantes représentait un investissement de temps que le client ne pouvait pas se permettre avant l'ouverture de sa nouvelle boutique en ligne. L'objectif n'était pas de publier une traduction automatique brute (jugée risquée pour un vocabulaire aussi spécialisé), mais de préparer un brouillon exploitable, à corriger plutôt qu'à rédiger de zéro.

- Fiches existantes en français, avec description, matériau, époque et provenance
- Objectif : brouillon anglais prêt à relire, jamais publié automatiquement
- Contrainte : suivre le coût en caractères facturés par l'API pour ne pas dépasser le forfait mensuel souscrit

## Le snippet commenté

Le script suivant s'exécute via WP-CLI, prend un identifiant de fiche en paramètre, envoie la description à l'API DeepL, et enregistre le résultat comme traduction en brouillon via Polylang, sans jamais changer le statut de publication :

```
<?php
// traduire-brouillon.php — usage : wp eval-file traduire-brouillon.php ID_FICHE

$id_source = (int) $args[0];
$texte     = get_post_field( 'post_content', $id_source );

$reponse = wp_remote_post( 'https://api-free.deepl.com/v2/translate', array(
    'headers' => array(
        'Authorization' => 'DeepL-Auth-Key ' . DEEPL_CLE_API,
    ),
    'body' => array(
        'text'        => $texte,
        'source_lang' => 'FR',
        'target_lang' => 'EN',
    ),
) );

if ( is_wp_error( $reponse ) ) {
    WP_CLI::error( 'Échec de la requête DeepL : ' . $reponse->get_error_message() );
}

$corps           = json_decode( wp_remote_retrieve_body( $reponse ), true );
$texte_traduit   = $corps['translations'][0]['text'];
$caracteres_utilises = mb_strlen( $texte );

$id_brouillon = wp_insert_post( array(
    'post_title'   => get_the_title( $id_source ) . ' (brouillon EN)',
    'post_content' => $texte_traduit,
    'post_status'  => 'draft',
    'post_type'    => get_post_type( $id_source ),
) );

pll_set_post_language( $id_brouillon, 'en' );
pll_save_post_translations( array( 'fr' => $id_source, 'en' => $id_brouillon ) );

WP_CLI::success( "Brouillon {$id_brouillon} créé, {$caracteres_utilises} caractères facturés." );
```

> L'essentiel à retenir : Le brouillon reste toujours à l'état non publié ; Chaque appel API journalise son coût en caractères ; Les descriptions d'objets rares gardent leur vocabulaire spécialisé en relecture

Le point le plus important de cette recette tient dans la ligne `'post_status' => 'draft'` : aucune fiche traduite automatiquement n'atteint jamais le statut publié sans passage explicite d'un humain, quelle que soit la qualité apparente de la traduction retournée par l'API.

### Le suivi du coût en caractères

Chaque appel journalise le nombre de caractères facturés, cumulé dans une option WordPress, pour que le client puisse suivre sa consommation par rapport au forfait de son abonnement DeepL, sans avoir à se connecter à l'interface du fournisseur pour vérifier ce chiffre.

## Variantes envisagées

Une première variante, écartée, consistait à traiter le catalogue entier en une seule commande par lot. Le client a préféré une exécution fiche par fiche, pour pouvoir relire et corriger chaque brouillon avant de passer à la suivante, plutôt que de se retrouver avec des centaines de brouillons à corriger d'un coup.

- Variante par lot avec une pause entre chaque appel, pour respecter la limite de requêtes par minute de l'API
- Variante avec glossaire DeepL personnalisé pour figer la traduction de certains termes techniques (« marqueterie », « patine »)
- Variante sans appel API, avec export CSV pour un traducteur professionnel externe, envisagée pour les pièces les plus rares du catalogue

## Ce que cette recette apporte

Cette recette illustre un usage raisonnable de la traduction automatique : accélérer la première passe sur un volume important de contenu répétitif, tout en conservant un garde-fou strict (le statut brouillon) qui empêche toute publication sans relecture humaine. Pour un vocabulaire aussi spécialisé que celui des antiquités, ce garde-fou n'est pas une précaution excessive, c'est une nécessité.
