Bangun · WooCommerce
Bangun plugin try-on WooCommerce
Ringkasan singkat
Plugin WooCommerce memanggil Photta API melalui HTTP biasa dari event WP-Cron, melakukan polling tugas pada tick berikutnya, dan mengimpor gambar akhir ke pustaka media.
- Credits: 5 credits pada 2K · 6 credits pada 4K
- Waktu umum: 1.5–4 min
- Pemrosesan: async, polling
Setiap angka di halaman ini bersumber dari dokumentasi API Photta · diperiksa
Tidak membutuhkan PHP SDK. WP-Cron mengirimkan tugas, tick berikutnya melakukan polling, dan WP-CLI mengimpor gambar akhir ke pustaka 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')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"]Cara kerja
Sebuah tick cron, sebuah poll, dan sebuah impor media
Rencanakan plugin, jadwalkan tugas, submit, polling pada tick berikutnya, impor.
Langkah 1
Rencanakan plugin
Satu tabel antrean, satu hook cron, satu layar pengaturan untuk kunci API. Proses generate tidak pernah berjalan saat request halaman berlangsung, sehingga aktivitas pembeli tidak akan terhambat.
Langkah 2
Dapatkan API key Photta
Baca dari environment di wp-config.php alih-alih menyimpannya di tabel opsi, sehingga ekspor database tidak mengekspos kredensial Anda.
Langkah 3
Jadwalkan event cron
Daftarkan hook berulang dan proses beberapa produk yang ada dalam antrean per eksekusi. Situs dengan traffic nyata memiliki tick yang sering; situs yang sepi membutuhkan system cron nyata.
Langkah 4
Kirimkan produk
Kirim gambar produk menggunakan wp_remote_post — URL, header, dan JSON body yang sama persis seperti contoh cURL. Simpan id yang dikembalikan pada baris antrean.
Langkah 5
Polling pada tick berikutnya
Baca status untuk setiap baris yang masih processing. Karena jeda antartick berdurasi beberapa menit, satu polling per tick biasanya sudah cukup; tidak ada proses sleep di dalam request.
Langkah 6
Impor gambar
Setelah tugas selesai, impor URL ke pustaka media dan tautkan ke produk. WP-CLI menangani proses unduhan sehingga plugin tidak perlu mem-buffer file tersebut.
Empat bagian utama plugin
Panggilan Photta dibuat berdasarkan dokumentasi API; wp_remote_post menerima URL, header, dan body yang sama.
# 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_imagePertanyaan umum developer
Pertanyaan yang sering diajukan developer WordPress
Apakah ada SDK PHP resmi?
Tidak. API ini menggunakan REST standar melalui HTTPS dengan header bearer, jadi wp_remote_post sudah mencakup semuanya tanpa dependensi tambahan yang perlu terus diperbarui.
Bagaimana cara melakukan pemanggilan API dari PHP?
Gunakan wp_remote_post dengan header Authorization dan Content-Type serta JSON body. Sampel cURL di halaman ini memiliki struktur request yang sama persis, kolom demi kolom.
Mengapa tidak membuat gambar langsung saat halaman dimuat?
Proses generate memakan waktu lebih lama dari batas wajar pemuatan halaman. Me-render saat request berlangsung membuat pembeli menunggu, berisiko terkena timeout, dan credits tetap terpotong apa pun yang terjadi.
Berapa banyak produk yang harus diproses dalam sekali jalan?
Ambil batch kecil per tick dan biarkan antrean terkuras bertahap di setiap tick berikutnya. Cara ini menjaga setiap eksekusi tetap singkat dan aman di bawah rate limit yang ditentukan.
Apa yang terjadi pada tugas yang gagal?
Tandai baris antrean sebagai failed dan simpan tipe error dari respons. Credits untuk proses generate yang gagal akan dikembalikan otomatis, jadi percobaan ulang tidak akan memotong biaya dua kali.
Halaman terkait
Bacaan terkait
Kapabilitas
Virtual try-on API untuk pakaian
REST API yang memakaikan pakaian pada manekin AI. Asinkron, waktu generasi 1.5–4 menit, 5 credits pada 2K, 6 pada 4K. Contoh cURL, Node.js, dan Python.
BacaQuickstart
Gambar Photta pertama dalam waktu kurang dari lima menit.
Daftar, buat API key, jalankan pemanggilan cURL pertama Anda, lakukan polling hingga selesai, simpan hasilnya. Lima langkah, terdokumentasi end-to-end.
BacaBahasa
cURL walkthrough
BacaErrors
Baca
Setiap angka di halaman ini bersumber dari dokumentasi API Photta · diperiksa
Plugin tanpa pohon dependensi
Header Bearer, JSON body, polling. Semua kapabilitas yang sudah dimiliki WordPress.