Byg · WooCommerce
Byg et WooCommerce try-on-plugin
I én sætning
Et WooCommerce-plugin kalder Photta-API'et over almindelig HTTP fra en WP-Cron-hændelse, poller jobbet ved det følgende tick og importerer det færdige billede til mediebiblioteket.
- Credits: 5 credits ved 2K · 6 credits ved 4K
- Typisk tid: 1.5–4 min
- Behandling: async, polling
Hvert tal på denne side stammer fra Photta API-dokumentationen · tjekket
Ingen PHP SDK er nødvendig. WP-Cron afsender jobbet, det næste tick poller det, og WP-CLI importerer det færdige billede til mediebiblioteket.
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"]Sådan virker det
Et cron-tick, et poll og en medieimport
Planlæg pluginet, planlæg arbejdet, afsend, poll ved næste tick, importér.
Trin 1
Planlæg pluginet
Én kø-tabel, ét cron-hook, én indstillingsside til nøglen. Generering sker aldrig under en sideanmodning, så intet, en kunde gør, kan hænge fast i det.
Trin 2
Hent en Photta API-nøgle
Læs den fra miljøet i wp-config.php i stedet for at gemme den i options-tabellen, så et database-eksport ikke indeholder dine legitimationsoplysninger.
Trin 3
Planlæg cron-hændelsen
Registrer et tilbagevendende hook og tag en håndfuld produkter fra køen pr. kørsel. Et website med reel trafik får hyppige ticks; et stille site behøver et rigtigt system-cron.
Trin 4
Afsend produktet
Send produktbilledet med wp_remote_post — den samme URL, de samme headers og den samme JSON-body som i cURL-eksemplet. Gem det returnerede id på kø-rækken.
Trin 5
Poll ved næste tick
Læs statussen for hver række, der stadig er processing. Fordi der er minutter mellem ticks, er ét poll pr. tick normalt nok; intet sover inde i en anmodning.
Trin 6
Importér billedet
Når et job er fuldført, importeres URL'en til mediebiblioteket og knyttes til produktet. WP-CLI klarer downloadet, så pluginet aldrig bufferer filen.
Pluginets fire bevægelige dele
Photta-kaldene er gengivet fra API-dokumentationen; wp_remote_post tager den samme URL, de samme headers og den samme 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_imageSpørgsmål udviklere stiller
Spørgsmål WordPress-udviklere stiller
Findes der et officielt PHP SDK?
Nej. API'et er ren REST over HTTPS med en bearer-header, så wp_remote_post dækker alt uden en afhængighed, der skal holdes opdateret.
Hvordan foretager jeg kaldet fra PHP?
wp_remote_post med Authorization- og Content-Type-headers og en JSON-body. cURL-eksemplet på denne side er den samme anmodning, felt for felt.
Hvorfor ikke generere ved sideindlæsning?
En generering tager længere tid, end en side bør. Rendering under en anmodning betyder, at kunden venter, en timeout afbryder det, og dine credits er brugt uanset hvad.
Hvor mange produkter bør én kørsel tage?
Tag en lille bid pr. tick, og lad køen tømmes over flere ticks. Det holder hver kørsel kort og placerer dig solidt inden for den gældende rate limit.
Hvad sker der med fejlede jobs?
Markér rækken som failed, og gem fejltypen fra svaret. Credits for en mislykket generering refunderes automatisk, så et nyt forsøg betaler ikke to gange.
Relaterede sider
Relateret læsning
Funktioner
Virtuel try-on API til tøj
REST API, der placerer tøj på AI-mannequiner. Asynkront, 1.5–4 minutters generering, 5 credits ved 2K, 6 ved 4K. cURL-, Node.js- og Python-eksempler.
LæsHurtig start
Første Photta-billede på under fem minutter.
Opret en konto, generer en API-nøgle, kør dit første cURL-kald, foretag polling indtil det er fuldført, gem resultatet. Fem trin, dokumenteret fra start til slut.
LæsSprog
cURL walkthrough
LæsErrors
Læs
Hvert tal på denne side stammer fra Photta API-dokumentationen · tjekket
Et plugin uden et afhængighedstræ
Bearer-header, JSON-body, polling. Alt det, WordPress allerede gør.