Développer · WooCommerce

Développer un plugin try-on pour WooCommerce

En une phrase

Un plugin WooCommerce appelle l'API Photta en HTTP standard depuis un événement WP-Cron, effectue le polling du job au tick suivant et importe l'image finale dans la médiathèque.

  • Crédits: 5 crédits en 2K · 6 crédits en 4K
  • Délai typique: 1.5–4 min
  • Traitement: asynchrone, polling

Chaque chiffre sur cette page provient de la documentation de l'API Photta · vérifié

Aucun SDK PHP n'est nécessaire. WP-Cron soumet le job, le tick suivant effectue le polling et WP-CLI importe l'image finale dans la médiathèque.

RESPONSE=$(curl -s -X POST https://api.photta.app/api/v1/tryon/apparel \
  -H "Authorization: Bearer $PHOTTA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "product_type": "top",
  "product_images": [
    "https://cdn.yourstore.com/products/shirt-front.jpg"
  ],
  "product_back_image": "https://cdn.yourstore.com/products/shirt-back.jpg",
  "product_category": "t_shirt",
  "mannequin_id": "mnk_f3a9b1",
  "pose_id": "pose_c2d4e5",
  "background": "https://cdn.yourstore.com/backgrounds/studio-loft.jpg",
  "lock_background": true,
  "resolution": "2K",
  "aspect_ratio": "3:4",
  "body_size": "M",
  "expression": "neutral",
  "user_instruction": "Keep the collar pattern crisp and centered."
}')
ID=$(echo "$RESPONSE" | jq -r '.data.id')

Comment ça fonctionne

Un tick cron, un poll et un import de média

Concevez le plugin, planifiez la tâche, soumettez, effectuez le polling au tick suivant, importez.

  1. Étape 1

    Concevoir le plugin

    Une table de file d'attente, un hook cron, un écran de configuration pour la clé. La génération ne s'exécute jamais pendant le chargement d'une page, évitant ainsi tout blocage pour l'acheteur.

  2. Étape 2

    Obtenir une clé d'API Photta

    Lisez-la depuis l'environnement dans wp-config.php plutôt que de la stocker dans la table des options, afin qu'un export de base de données n'expose pas vos identifiants.

  3. Étape 3

    Planifier l'événement cron

    Enregistrez un hook récurrent et traitez un petit lot de produits en file d'attente par exécution. Un site avec un trafic réel bénéficie de ticks fréquents ; un site à faible trafic nécessite un vrai cron système.

  4. Étape 4

    Soumettre le produit

    Envoyez l'image du produit avec wp_remote_post — mêmes URL, en-têtes et corps JSON que l'exemple cURL. Stockez l'id retourné sur la ligne correspondante de la file d'attente.

  5. Étape 5

    Effectuer le polling au tick suivant

    Récupérez le statut de chaque ligne encore en statut processing. Les ticks étant espacés de quelques minutes, un seul poll par tick suffit généralement ; aucun sleep n'est exécuté au sein d'une requête.

  6. Étape 6

    Importer l'image

    Dès qu'un job est terminé, importez l'URL dans la médiathèque et associez-la au produit. WP-CLI gère le téléchargement pour que le plugin n'ait jamais à charger le fichier en mémoire tampon.

Les quatre composants du plugin

Les appels Photta sont basés sur la documentation de l'API ; wp_remote_post accepte les mêmes URL, en-têtes et corps de requête.

# wp-config.php holds the key; the plugin reads it with getenv()
# define( 'PHOTTA_API_KEY', getenv( 'PHOTTA_API_KEY' ) );
export PHOTTA_API_KEY="photta_live_xxx"
export PHOTTA_BASE_URL="https://api.photta.app/api/v1"
RESPONSE=$(curl -s -X POST https://api.photta.app/api/v1/tryon/apparel \
  -H "Authorization: Bearer $PHOTTA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "product_type": "top",
  "product_images": [
    "https://cdn.yourstore.com/products/shirt-front.jpg"
  ],
  "product_back_image": "https://cdn.yourstore.com/products/shirt-back.jpg",
  "product_category": "t_shirt",
  "mannequin_id": "mnk_f3a9b1",
  "pose_id": "pose_c2d4e5",
  "background": "https://cdn.yourstore.com/backgrounds/studio-loft.jpg",
  "lock_background": true,
  "resolution": "2K",
  "aspect_ratio": "3:4",
  "body_size": "M",
  "expression": "neutral",
  "user_instruction": "Keep the collar pattern crisp and centered."
}')
ID=$(echo "$RESPONSE" | jq -r '.data.id')
# $ID is data.id from the POST response. Poll every 3 seconds until status is "completed" or "failed".
for i in $(seq 1 120); do
  RESULT=$(curl -s "https://api.photta.app/api/v1/tryon/apparel/$ID" -H "Authorization: Bearer $PHOTTA_API_KEY")
  STATUS=$(echo "$RESULT" | jq -r '.data.status')
  [ "$STATUS" = "completed" ] && break
  [ "$STATUS" = "failed" ] && echo "generation failed" && exit 1
  sleep 3
done
echo "$RESULT" | jq -r '.data.output_url'
# WP-CLI does the download, so the plugin never buffers the file itself
wp media import "$OUTPUT_URL" \
  --post_id="$PRODUCT_ID" \
  --title="Virtual try-on" \
  --featured_image

Questions fréquentes des développeurs

Questions fréquentes des développeurs WordPress

Existe-t-il un SDK PHP officiel ?

Non. L'API est du simple REST sur HTTPS avec un en-tête Bearer ; wp_remote_post couvre donc tous les besoins sans dépendance supplémentaire à maintenir.

Comment effectuer l'appel depuis PHP ?

wp_remote_post avec les en-têtes Authorization et Content-Type et un corps JSON. L'exemple cURL sur cette page correspond exactement à la même requête, champ par champ.

Pourquoi ne pas générer au chargement de la page ?

Une génération prend plus de temps qu'une page ne le devrait. Générer pendant une requête fait attendre l'acheteur, risque de déclencher un timeout et les credits sont débités dans tous les cas.

Combien de produits traiter par exécution ?

Prenez un petit lot par tick et laissez la file d'attente se vider au fil des ticks. Cela garantit des exécutions courtes et vous maintient largement sous le rate limit publié.

Que devient un job failed ?

Marquez la ligne en failed et conservez le type d'erreur renvoyé par la réponse. Les credits d'une génération échouée sont automatiquement remboursés, garantissant qu'une nouvelle tentative ne soit pas facturée deux fois.

Un plugin sans arbre de dépendances

En-tête Bearer, corps JSON, polling. Tout ce que WordPress sait déjà faire nativement.