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')const res = await fetch("https://api.photta.app/api/v1/tryon/apparel", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.PHOTTA_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
"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."
}),
});
const { data } = await res.json(); // data.id, data.statusimport os, requests
res = requests.post(
"https://api.photta.app/api/v1/tryon/apparel",
headers={"Authorization": f"Bearer {os.environ['PHOTTA_API_KEY']}"},
json={
"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."
},
)
data = res.json()["data"] # data["id"], data["status"]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.
É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.
É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.
É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.
É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.
É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.
É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_imageQuestions 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.
Pages associées
Lectures complémentaires
Fonctionnalités
API de try-on virtuel pour les vêtements
API REST qui positionne des vêtements sur des mannequins générés par IA. Traitement asynchrone, génération en 1.5–4 minutes, 5 crédits en 2K, 6 en 4K. Exemples en cURL, Node.js et Python.
LireDémarrage rapide
Première image Photta en moins de cinq minutes.
Inscrivez-vous, générez une clé d'API, lancez votre premier appel cURL, effectuez le polling jusqu'à la complétion, persistez le résultat. Cinq étapes documentées de bout en bout.
LireLangages
cURL walkthrough
LireErrors
Lire
Chaque chiffre sur cette page provient de la documentation de l'API Photta · vérifié
Un plugin sans arbre de dépendances
En-tête Bearer, corps JSON, polling. Tout ce que WordPress sait déjà faire nativement.