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')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"]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.
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.
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.
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.
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.
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.
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_imageGeliş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.
İlgili sayfalar
İlgili kaynaklar
Yetenekler
Sanal try-on API'si giyim için
Giysileri yapay zeka mankenlerine yerleştiren REST API. Asenkron, 1.5–4 dakika oluşturma süresi, 2K için 5 credits, 4K için 6 credits. cURL, Node.js ve Python örnekleri.
OkuHızlı başlangıç
Beş dakikadan kısa sürede ilk Photta görseli.
Kayıt olun, bir API anahtarı oluşturun, ilk cURL çağrınızı çalıştırın, tamamlanana kadar yoklayın, sonucu kalıcı hale getirin. Beş adım, uçtan uca belgelenmiş.
OkuDiller
cURL walkthrough
OkuErrors
Oku
Bu sayfadaki her veri şuradan alınmıştır: Photta API dokümantasyonu · kontrol edildi
Bağımlılık ağacı olmayan bir eklenti
Bearer başlığı, JSON gövdesi, polling. WordPress'in halihazırda yaptığı her şey.