Bygg · WooCommerce
Bygg en WooCommerce-plugin for try-on
I én setning
En WooCommerce-plugin kaller Photta-API-et over ren HTTP fra et WP-Cron-event, poller jobben ved neste tick og importerer det ferdige bildet til mediebiblioteket.
- Credits: 5 credits ved 2K · 6 credits ved 4K
- Typisk tidsbruk: 1.5–4 min
- Prosessering: asynkron, polling
Hvert tall på denne siden er hentet fra dokumentasjonen for Photta-API-et · verifisert
Ingen PHP-SDK er nødvendig. WP-Cron sender jobben, neste tick poller den, og WP-CLI importerer det ferdige bildet 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"]Slik fungerer det
Et cron-tick, en poll og en medieimport
Planlegg pluginen, planlegg arbeidet, send inn, poll ved neste tick, importer.
Trinn 1
Planlegg pluginen
Én køtabell, én cron-hook, én innstillingsside for nøkkelen. Generering skjer aldri under en sideforespørsel, så ingenting en kunde gjør kan henge på den.
Trinn 2
Hent en Photta API-nøkkel
Les den fra miljøet i wp-config.php i stedet for å lagre den i options-tabellen, slik at en databaseeksport ikke inneholder påloggingsinformasjonen din.
Trinn 3
Planlegg cron-eventet
Registrer en regelmessig hook og ta en håndfull produkter fra køen per kjøring. Et nettsted med reell trafikk får hyppige ticks; et rolig nettsted trenger en ekte system-cron.
Trinn 4
Send inn produktet
Send produktbildet med wp_remote_post — samme URL, headere og JSON-body som cURL-eksempelet. Lagre den returnerte id-en på køraden.
Trinn 5
Poll ved neste tick
Les statusen for hver rad som fortsatt er processing. Fordi det er minutter mellom ticks, er én poll per tick vanligvis nok; ingenting gjør sleep inne i en forespørsel.
Trinn 6
Importer bildet
Når en jobb er fullført, importer URL-en til mediebiblioteket og knytt den til produktet. WP-CLI gjør nedlastingen slik at pluginen aldri bufrer filen.
Pluginens fire bevegelige deler
Photta-kallene gjengis fra API-dokumentasjonen; wp_remote_post tar samme URL, headere og 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ørsmål utviklere stiller
Spørsmål WordPress-utviklere stiller
Finnes det en offisiell PHP-SDK?
Nei. API-et er ren REST over HTTPS med en bearer-header, så wp_remote_post dekker alt uten en avhengighet som må holdes oppdatert.
Hvordan gjør jeg kallet fra PHP?
wp_remote_post med Authorization- og Content-Type-headere og en JSON-body. cURL-eksempelet på denne siden er nøyaktig samme forespørsel, felt for felt.
Hvorfor ikke generere ved sidelasting?
En generering tar lengre tid enn en side bør bruke. Rendring under en forespørsel betyr at kunden må vente, en tidsavbrudd feiler den, og credits blir brukt uansett.
Hvor mange produkter bør én kjøring ta?
Ta en liten del per tick og la køen tømmes over flere ticks. Det holder hver kjøring kort og sørger for at du holder deg godt innenfor gjeldende rate limit.
Hva skjer med feilede jobber?
Merk raden failed og ta vare på feiltypen fra responsen. Credits for en feilet generering refunderes automatisk, så et nytt forsøk betaler ikke dobbelt.
Relaterte sider
Relatert lesing
Funksjoner
Virtuell try-on API for klær
REST API som plasserer klær på AI-mannequiner. Asynkront, 1,5–4 minutters generering, 5 credits i 2K, 6 i 4K. Eksempler for cURL, Node.js og Python.
LesHurtigstart
Første Photta-bilde på under fem minutter.
Registrer deg, generer en API-nøkkel, kjør ditt første cURL-kall, utfør polling til det er fullført, lagre resultatet. Fem trinn, dokumentert fra start til slutt.
LesSpråk
cURL walkthrough
LesErrors
Les
Hvert tall på denne siden er hentet fra dokumentasjonen for Photta-API-et · verifisert
En plugin uten et avhengighetstre
Bearer-header, JSON-body, polling. Alt WordPress allerede gjør.