Geliştir · WooCommerce

Bir WooCommerce try-on eklentisi geliştirin

Tek cümlede

Bir WooCommerce eklentisi, bir WP-Cron olayından standart HTTP üzerinden Photta API'sini çağırır, sonraki döngüde işi poll eder ve tamamlanan görseli ortam kütüphanesine aktarır.

  • Credits: 2K'da 5 credits · 4K'da 6 credits
  • Tipik süre: 1.5–4 min
  • İşleme: asenkron, polling

Bu sayfadaki her veri şuradan alınmıştır: Photta API dokümantasyonu · kontrol edildi

PHP SDK gerekmez. WP-Cron işi iletir, sonraki döngü bunu poll eder ve WP-CLI tamamlanan görseli ortam kütüphanesine aktarır.

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

Nasıl çalışır

Bir cron döngüsü, bir poll ve bir ortam aktarımı

Eklentiyi planlayın, işi zamanlayın, iletin, sonraki döngüde poll edin, aktarın.

  1. Adım 1

    Eklentiyi planlayın

    Bir kuyruk tablosu, bir cron kancası, anahtar için bir ayarlar ekranı. Üretim hiçbir zaman bir sayfa isteği sırasında gerçekleşmez; böylece bir müşterinin yaptığı hiçbir işlem askıda kalmaz.

  2. Adım 2

    Bir Photta API anahtarı alın

    Veritabanı dışa aktarımında kimlik bilgilerinizin yer almaması için, bunu options tablosunda saklamak yerine wp-config.php içindeki ortam değişkeninden okuyun.

  3. Adım 3

    Cron olayını zamanlayın

    Yinelenen bir kanca kaydedin ve her çalıştırmada kuyruktan az sayıda ürün alın. Gerçek trafiği olan bir site sık döngüler alır; trafiği az bir sitenin ise gerçek bir sistem cron'una ihtiyacı vardır.

  4. Adım 4

    Ürünü iletin

    Ürün görselini wp_remote_post ile gönderin — cURL örneğindeki aynı URL, başlıklar ve JSON gövdesiyle. Dönen id değerini kuyruk satırına kaydedin.

  5. Adım 5

    Sonraki döngüde poll edin

    Hâlâ processing durumundaki her satırın durumunu okuyun. Döngüler dakikalar arayla gerçekleştiğinden, döngü başına bir poll genellikle yeterlidir; istek içinde hiçbir şey beklemeye (sleep) alınmaz.

  6. Adım 6

    Görseli içe aktarın

    İş tamamlandıktan sonra URL'yi ortam kütüphanesine aktarın ve ürüne bağlayın. Eklentinin dosyayı belleğe almaması için indirme işlemini WP-CLI gerçekleştirir.

Eklentinin dört hareketli parçası

Photta çağrıları API dokümantasyonundan uyarlanmıştır; wp_remote_post aynı URL'yi, başlıkları ve gövdeyi kullanır.

# 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

Geliştiricilerin sıkça sorduğu sorular

WordPress geliştiricilerinin sık sorduğu sorular

Resmi bir PHP SDK var mı?

Hayır. API, bearer başlığına sahip HTTPS üzerinden yalın REST mimarisidir; dolayısıyla wp_remote_post, güncel tutulması gereken bir bağımlılık olmadan her şeyi kapsar.

PHP ile çağrıyı nasıl yaparım?

Authorization ve Content-Type başlıkları ile JSON gövdesi içeren wp_remote_post kullanarak. Bu sayfadaki cURL örneği, alan bazında aynı istektir.

Neden sayfa yüklenirken üretilmiyor?

Üretim, bir sayfa yüklemesinin sürmesi gerekenden daha uzun sürer. Bir istek sırasında render işlemi yapmak müşterinin beklemesi, zaman aşımının işlemi sonlandırması ve her halükarda credits harcanması anlamına gelir.

Bir çalıştırma kaç ürün almalıdır?

Döngü başına küçük bir dilim alın ve kuyruğun döngüler boyunca tükenmesini sağlayın. Bu, her çalıştırmayı kısa tutar ve yayınlanan rate limit sınırları içinde kalmanızı sağlar.

Başarısız olan işlere ne olur?

Satırı failed olarak işaretleyin ve yanıttaki hata türünü saklayın. Başarısız bir üretim için credits otomatik olarak iade edilir; bu sayede yeniden deneme ikinci kez ücretlendirilmez.

Bağımlılık ağacı olmayan bir eklenti

Bearer başlığı, JSON gövdesi, polling. WordPress'in halihazırda yaptığı her şey.