Bygg · WooCommerce
Bygg ett WooCommerce-plugin för try-on
I en mening
Ett WooCommerce-plugin anropar Photta API över vanlig HTTP från en WP-Cron-händelse, pollar jobbet vid nästa tick och importerar den färdiga bilden till mediebiblioteket.
- Credits: 5 credits vid 2K · 6 credits vid 4K
- Typisk tid: 1.5–4 min
- Bearbetning: asynkron, polling
Varje siffra på den här sidan kommer från Photter API-dokumentationen · kontrollerad
Inget PHP SDK behövs. WP-Cron skickar jobbet, nästa tick pollar det och WP-CLI importerar den färdiga bilden till 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"]Hur det fungerar
Ett cron-tick, en poll och en medieimport
Planera pluginet, schemalägg arbetet, skicka, polla vid nästa tick, importera.
Steg 1
Planera pluginet
En kötabell, en cron-hook, en inställningssida för nyckeln. Generering sker aldrig under en sidbegäran, så inget en kund gör kan fastna på det.
Steg 2
Hämta en Photta API-nyckel
Läs den från miljön i wp-config.php istället för att lagra den i options-tabellen, så att en databasexport inte exponerar dina inloggningsuppgifter.
Steg 3
Schemalägg cron-händelsen
Registrera en återkommande hook och ta en handfull köade produkter per körning. En webbplats med verklig trafik får frekventa ticks; en tyst sajt behöver en riktig system-cron.
Steg 4
Skicka produkten
Skicka produktbilden med wp_remote_post — samma URL, headers och JSON-body som i cURL-exemplet. Spara returnerat id på raden i kön.
Steg 5
Polla vid nästa tick
Läs av statusen för varje rad som fortfarande har status processing. Eftersom det är minuter mellan ticks räcker det oftast med en poll per tick; ingenting sover inuti en förfrågan.
Steg 6
Importera bilden
När ett jobb har status completed importerar du URL:en till mediebiblioteket och kopplar den till produkten. WP-CLI sköter nedladdningen så att pluginet aldrig buffrar filen.
Pluginets fyra rörliga delar
Photta-anropen återges från API-dokumentationen; wp_remote_post tar samma URL, headers och 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_imageVanliga utvecklarfrågor
Frågor WordPress-utvecklare ställer
Finns det ett officiellt PHP SDK?
Nej. API:et är ren REST över HTTPS med en Bearer-header, så wp_remote_post täcker allt utan ett beroende att hålla uppdaterat.
Hur gör jag anropet från PHP?
wp_remote_post med Authorization- och Content-Type-headers samt en JSON-body. cURL-exemplet på den här sidan är samma förfrågan, fält för fält.
Varför inte generera vid sidladdning?
En generering tar längre tid än en sida borde. Att rendera under en förfrågan innebär att kunden väntar, en timeout avbryter processen och dina credits förbrukas ändå.
Hur många produkter bör en körning ta?
Ta en liten del per tick och låt kön betas av över flera ticks. Det håller varje körning kort och ser till att du håller dig väl inom utsatt rate limit.
Vad händer med misslyckade jobb?
Märk raden med failed och spara feltypen från svaret. Credits för en misslyckad generering återbetalas automatiskt, så ett nytt försök kostar inte dubbelt.
Relaterade sidor
Relaterad läsning
Funktioner
API för virtuell try-on för apparel
REST API som placerar kläder på AI-mannekänger. Asynkron, 1,5–4 minuters generering, 5 credits vid 2K, 6 vid 4K. Exempel för cURL, Node.js och Python.
LäsSnabbstart
Första Photta-bilden på under fem minuter.
Skapa konto, generera en API-nyckel, kör ditt första cURL-anrop, polla tills det är klart, spara resultatet. Fem steg, dokumenterade från början till slut.
LäsSpråk
cURL walkthrough
LäsErrors
Läs
Varje siffra på den här sidan kommer från Photter API-dokumentationen · kontrollerad
Ett plugin utan ett beroendeträd
Bearer-header, JSON-body, polling. Allt som WordPress redan hanterar.