Integración · WooCommerce
Crea un plugin de try-on para WooCommerce
En una frase
Un plugin de WooCommerce llama a la API de Photta mediante HTTP simple desde un evento de WP-Cron, hace polling del trabajo en el siguiente tick e importa la imagen terminada a la biblioteca de medios.
- Credits: 5 credits a 2K · 6 credits a 4K
- Tiempo típico: 1.5–4 min
- Procesamiento: asíncrono, polling
Cada cifra de esta página proviene de la documentación de la API de Photta · verificado
No se necesita SDK de PHP. WP-Cron envía el trabajo, el siguiente tick hace polling y WP-CLI importa la imagen terminada a la biblioteca de medios.
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"]Cómo funciona
Un tick de cron, un poll y una importación de medios
Planifica el plugin, programa el trabajo, envía, haz polling en el siguiente tick e importa.
Paso 1
Planifica el plugin
Una tabla de cola, un hook de cron y una pantalla de ajustes para la clave. La generación nunca ocurre durante la petición de una página, por lo que ninguna acción del comprador se quedará bloqueada.
Paso 2
Obtén una API key de Photta
Léela desde el entorno en wp-config.php en lugar de almacenarla en la tabla de opciones; así, una exportación de la base de datos no expondrá tus credenciales.
Paso 3
Programa el evento de cron
Registra un hook recurrente y procesa un pequeño lote de productos en cola por ejecución. Un sitio con tráfico real recibe ticks frecuentes; uno sin visitas requiere un cron del sistema real.
Paso 4
Envía el producto
Envía la imagen del producto con wp_remote_post —la misma URL, encabezados y cuerpo JSON que en el ejemplo de cURL—. Guarda el id devuelto en la fila de la cola.
Paso 5
Haz polling en el siguiente tick
Consulta el estado de cada fila que siga en processing. Como los ticks se distancian por minutos, un poll por tick suele ser suficiente; nada se queda en espera dentro de una petición.
Paso 6
Importa la imagen
Una vez completado el trabajo, importa la URL a la biblioteca de medios y asígnala al producto. WP-CLI se encarga de la descarga para que el plugin nunca almacene el archivo en búfer.
Las cuatro partes móviles del plugin
Las llamadas a Photta se basan en la documentación de la API; wp_remote_post admite la misma URL, encabezados y cuerpo.
# 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_imagePreguntas frecuentes de desarrolladores
Preguntas habituales de desarrolladores de WordPress
¿Existe un SDK oficial de PHP?
No. La API es REST estándar sobre HTTPS con un encabezado Bearer, por lo que wp_remote_post cubre todo sin añadir dependencias que mantener.
¿Cómo realizo la llamada desde PHP?
Con wp_remote_post, usando los encabezados Authorization y Content-Type y un cuerpo JSON. El ejemplo de cURL en esta página es exactamente la misma petición, campo por campo.
¿Por qué no generar durante la carga de la página?
Una generación tarda más de lo que debería durar una página. Renderizar durante una petición hace esperar al comprador, arriesga un timeout y los credits se consumen de todos modos.
¿Cuántos productos debe procesar cada ejecución?
Toma un lote pequeño por cada tick y deja que la cola se vacíe a lo largo del tiempo. Esto mantiene cada ejecución corta y te sitúa holgadamente dentro del rate limit publicado.
¿Qué ocurre con los trabajos fallidos?
Marca la fila como failed y conserva el tipo de error de la respuesta. Los credits de una generación fallida se reembolsan automáticamente, por lo que un reintento no paga dos veces.
Páginas relacionadas
Lecturas relacionadas
Capacidades
API de virtual try-on para ropa
API REST que viste maniquíes de IA con prendas. Generación asíncrona de 1.5–4 minutos, 5 créditos en 2K, 6 en 4K. Ejemplos en cURL, Node.js y Python.
LeerGuía rápida
Tu primera imagen de Photta en menos de cinco minutos.
Regístrate, genera una API key, ejecuta tu primera llamada cURL, haz polling hasta que se complete y guarda el resultado. Cinco pasos, documentados de principio a fin.
LeerLenguajes
cURL walkthrough
LeerErrors
Leer
Cada cifra de esta página proviene de la documentación de la API de Photta · verificado
Un plugin sin árbol de dependencias
Encabezado Bearer, cuerpo JSON y polling. Todo lo que WordPress ya resuelve de forma nativa.