Build · WooCommerce
Sviluppa un plugin try-on per WooCommerce
In sintesi
Un plugin WooCommerce chiama l'API Photta via HTTP standard da un evento WP-Cron, esegue il polling del job al tick successivo e importa l'immagine finale nella libreria media.
- Credits: 5 credits a 2K · 6 credits a 4K
- Tempo tipico: 1.5–4 min
- Elaborazione: asincrono, polling
Ogni dato in questa pagina proviene da la documentazione dell'API di Photta · verificato
Nessun SDK PHP necessario. WP-Cron invia il job, il tick successivo esegue il polling e WP-CLI importa l'immagine finale nella libreria media.
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"]Come funziona
Un tick cron, un poll e l'importazione nei media
Pianifica il plugin, schedula il lavoro, invia la richiesta, esegui il polling al tick successivo, importa.
Passaggio 1
Pianifica il plugin
Una tabella per la coda, un cron hook, una schermata delle impostazioni per la chiave. La generazione non avviene mai durante la richiesta di una pagina, evitando qualsiasi blocco per l'utente.
Passaggio 2
Ottieni una chiave API Photta
Leggila dall'ambiente in wp-config.php anziché salvarla nella tabella delle opzioni, così un export del database non esporrà le tue credenziali.
Passaggio 3
Schedula l'evento cron
Registra un hook ricorrente ed elabora un gruppo ristretto di prodotti in coda per ogni esecuzione. Un sito con traffico reale riceve tick frequenti; un sito a basso traffico richiede un vero cron di sistema.
Passaggio 4
Invia il prodotto
Invia l'immagine del prodotto con wp_remote_post — stesso URL, header e body JSON dell'esempio cURL. Salva l'id restituito nella riga della coda.
Passaggio 5
Esegui il polling al tick successivo
Leggi lo stato di ogni riga ancora in stato processing. Poiché i tick distano minuti l'uno dall'altro, un poll per tick è di solito sufficiente; nessun processo resta in sleep durante la richiesta.
Passaggio 6
Importa l'immagine
Quando un job è completed, importa l'URL nella libreria media e assegnalo al prodotto. WP-CLI gestisce il download, evitando che il plugin debba memorizzare il file nel buffer.
I quattro componenti chiave del plugin
Le chiamate a Photta sono basate sulla documentazione dell'API; wp_remote_post accetta gli stessi parametri per URL, header e body.
# 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_imageDomande frequenti degli sviluppatori
Domande frequenti degli sviluppatori WordPress
Esiste un SDK PHP ufficiale?
No. L'API è una semplice interfaccia REST via HTTPS con header Bearer, quindi wp_remote_post copre qualsiasi esigenza senza dipendenze esterne da aggiornare.
Come si effettua la chiamata da PHP?
Usa wp_remote_post con gli header Authorization e Content-Type e un body JSON. L'esempio cURL in questa pagina rappresenta la stessa richiesta, campo per campo.
Perché non generare al caricamento della pagina?
La generazione richiede più tempo di quanto una pagina dovrebbe impiegare a caricarsi. Eseguire il rendering durante una richiesta fa attendere l'utente, rischia di terminare in timeout e consuma comunque i credits.
Quanti prodotti elaborare per ogni esecuzione?
Elabora una piccola porzione per tick e lascia svuotare la coda progressivamente. Questo mantiene ogni esecuzione rapida ed evita di superare il rate limit specificato.
Cosa succede ai job non riusciti?
Contrassegna la riga come failed e conserva il tipo di errore restituito nella risposta. I credits per una generazione non riuscita vengono rimborsati automaticamente, quindi un nuovo tentativo non scala importi doppi.
Pagine correlate
Letture correlate
Funzionalità
API di Virtual try-on per abbigliamento
REST API per applicare capi di abbigliamento su manichini AI. Generazione asincrona in 1.5–4 minuti, 5 crediti a 2K, 6 a 4K. Esempi per cURL, Node.js e Python.
LeggiGuida rapida
La prima immagine con Photta in meno di cinque minuti.
Registrati, genera una chiave API, esegui la tua prima chiamata cURL, fai polling fino al completamento, salva il risultato. Cinque passaggi, interamente documentati.
LeggiLinguaggi
cURL walkthrough
LeggiErrors
Leggi
Ogni dato in questa pagina proviene da la documentazione dell'API di Photta · verificato
Un plugin senza albero delle dipendenze
Header Bearer, body JSON, polling. Tutto ciò che WordPress gestisce già nativamente.