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')

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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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_image

Domande 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.

Un plugin senza albero delle dipendenze

Header Bearer, body JSON, polling. Tutto ciò che WordPress gestisce già nativamente.