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

Cara kerja

Sebuah tick cron, sebuah poll, dan sebuah impor media

Rencanakan plugin, jadwalkan tugas, submit, polling pada tick berikutnya, impor.

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

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

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

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

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

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

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

Plugin tanpa pohon dependensi

Header Bearer, JSON body, polling. Semua kapabilitas yang sudah dimiliki WordPress.