Qué hace
Un producto hecho para una sola persona no encaja en una página de producto normal. El cliente tiene que enviarte una fotografía, tú tienes que construir la pieza y él tiene que verla y aceptarla antes de que gastes el material. Hecho a mano eso es una cadena de correos, y la cadena se rompe siempre en el mismo punto: nadie puede decir con certeza si el cliente aprobó la versión que realmente imprimiste.
MevvAtelier convierte esa cadena en parte del pedido. El pedido lleva encima las fotografías, la vista previa, la aprobación y su marca de tiempo, y los estados por los que pasa son estados de pedido reales de WooCommerce, así que aparecen en la lista de pedidos, en los informes y en los filtros que ya usas.
- Úselo cuando
- Vendes algo que produces por pedido a partir de algo que te envía el cliente, y quieres que su aprobación quede registrada antes de que empiece la producción.
- No es un plugin de opciones de producto
- No hay matriz de variaciones ni constructor de opciones por producto. Es un único circuito, con una única página de configurador, para una línea de productos que fabricas bajo pedido.
- Las fotografías no son adjuntos de la biblioteca de medios
- Son archivos privados con su propio plazo de conservación. La fotografía de un cliente no es la foto de un producto y no se trata como tal.
Requisitos: WordPress 6.0 o posterior, PHP 8.1 o posterior y WooCommerce. Sin WooCommerce el plugin se detiene solo y lo dice: no tiene un circuito de pedidos propio al que recurrir.
Ajustes, y el único límite que queda
Todo lo que una tienda cambia normalmente vive en Atölye → Ayarlar: cómo se llama cada paquete, cuánto cuesta de una a seis personas, los precios de los dos complementos, qué paquete lleva el kit de pintura gratis, cuál sale marcado al abrir la página y cuánto tiempo se guardan las fotografías.
Escribes los precios en liras y el plugin los guarda como unidades menores enteras. Guardar es todo o nada: si un campo no se puede leer, no se escribe ninguno y la pantalla te dice cuál. Media tabla de precios es una tabla que se rompe justo cuando un cliente está pidiendo.
- Cambiar el nombre de un paquete
- Los nombres que vienen con el plugin describen figuras impresas en 3D porque esa era la tienda para la que se construyó. Escribe los tuyos —«Colgante pequeño», «Placa grabada», «Lámina A4»— y eso es lo que ve el cliente. La clave interna junto a cada campo no cambia nunca, así que los pedidos existentes siguen apuntando a lo correcto.
- Vender menos de cinco
- Deja vacío el nombre de un paquete y desaparece del formulario de pedido, y el servidor lo rechaza si alguien lo envía de todos modos. Sus precios se quedan en la tabla, así que volver a activarlo más adelante es una palabra, no reescribirlo todo.
- Qué paquete aparece marcado
- Una decisión comercial más que técnica: el nivel intermedio ancla al cliente hacia arriba, el más barato lo ancla hacia abajo. Si el que elegiste se apaga más tarde, el formulario recurre al primer paquete que siga activo en lugar de abrirse sin precio alguno.
EL LÍMITE QUE QUEDA: hay cinco huecos de paquete. Puedes renombrarlos, ponerles precio y apagarlos, pero no puedes añadir un sexto. Si tu línea necesita más, escríbenos y dinos cuántos: eso es lo siguiente que se está construyendo, y conocer el número real le da forma.
Instalación
- Instala y activa WooCommerce primero. MevvAtelier se niega a arrancar sin él.
- Instala MevvAtelier: sube el zip desde Plugins → Añadir nuevo, o copia el directorio
mevvatelieren/wp-content/plugins/. - Actívalo. Al activarse, el plugin registra sus estados de pedido, crea el directorio de la bóveda de fotos y programa la tarea diaria de conservación.
- Crea una página y pon en ella el shortcode
[mevvatelier]. Esa página es tu formulario de pedido. - Haz un pedido de prueba desde la página, luego abre Atölye en el menú de administración y recórrelo una vez de principio a fin. Hazlo antes de anunciar la página: el recorrido lleva cinco minutos y es la única forma de ver los correos que tu tienda envía realmente.
Los enlaces de aprobación se firman con un secreto generado en el primer uso y guardado en tu propia base de datos. Nunca sale de tu servidor y no se deriva de nada que nosotros tengamos.
Los tres shortcodes
- [mevvatelier]
- El formulario de pedido. Cinco pasos: paquete, cuántas personas hay en la escena, las fotografías, los datos del cliente y una casilla de consentimiento. Muestra un total en curso mientras el cliente elige, y ese total nunca es aquello con lo que se escribe el pedido; véase «Dónde viven los precios».
- [mevvatelier_tanitim]
- Una banda promocional para tu página de inicio: un titular, un texto breve y un botón hacia el formulario de pedido. Acepta un id de adjunto:
[mevvatelier_tanitim gorsel="123"]. - [mevvatelier_gorsel]
- Una imagen de tu biblioteca de medios renderizada con los tamaños adaptables que WordPress ya generó:
[mevvatelier_gorsel id="123" size="large"]. Existe para que una página promocional no imprima una fotografía de 2000 píxeles en un hueco de 380 píxeles en un móvil.
La página de pedido desactiva la caché de página para sí misma, en el lenguaje que LiteSpeed, WP Rocket y W3 Total Cache entienden por igual, y además envía cabeceras no-store. Un formulario de pedido cacheado se envía con un token caducado y falla en silencio, lo que para el cliente parece un formulario que no hace nada.
Dónde viven los precios
El precio de un pedido se calcula en tu servidor únicamente a partir de la selección del cliente. Un total enviado por el navegador se ignora por completo: preguntarle al navegador cuánto cobrar es el camino más corto a que te compren por nada. El dinero se guarda en unidades menores enteras (kuruş, céntimos), nunca como decimal, de modo que un pedido largo no puede desviarse una unidad entre la factura y el pedido.
Los editas en Atölye → Ayarlar, en liras, con coma para los kuruş. Cada paquete necesita un precio para cada número de personas admitido, de uno a seis. La tabla entera se valida antes de escribir nada, y si un campo no se puede leer la pantalla te dice cuál y no escribe ninguno: media tabla de precios es una tabla que se rompe justo cuando un cliente está pidiendo.
Todo cabe en una sola opción, mevvatelier_pricing, si prefieres desplegarlo con WP-CLI en vez de hacer clic. El plugin vuelve a leer la opción después de escribirla y se niega a informar de éxito si la lectura no coincide, porque a una tienda con caché de objetos persistente se le puede decir «guardado» mientras sigue vendiendo al precio antiguo.
wp eval '
$t = MevvAtelier_Settings::pricing_table();
$t["labels"]["orta"] = "Orta boy kolye ucu";
$t["packages"]["orta"][1] = MevvAtelier_Pricing::parse_money( "1.290,50" );
$t["default_package"] = "orta";
var_dump( MevvAtelier_Settings::save_pricing_table( $t ) );
'
Las claves internas de paquete son anahtarlik, orta, buyuk, anahtarlik_orta y uclu_set; las de complementos son paint_kit y rush. Son a lo que se refieren el código y tus pedidos existentes, así que nunca cambian: el nombre que ve el cliente es un campo aparte que puedes reescribir cuando quieras.
La cola del taller
Atölye aparece en el menú de administración para cualquiera que pueda editar pedidos de la tienda. Lista los pedidos abiertos empezando por el más antiguo y marca en rojo los que han superado el plazo prometido: veinticuatro horas normalmente, seis en un pedido urgente. La pregunta que responde no es «qué está abierto» sino «qué va con retraso», que es la única que merece una pantalla.
El operario sube la vista previa desde la misma fila. Al subirla se guarda el archivo en la bóveda, se registra una suma de verificación de exactamente lo que se mostró, el pedido pasa a Müşteri onayında y se envía el correo al cliente: una sola acción, no cuatro cosas que recordar.
- Model bekliyor
wc-mevv-model. Las fotografías están dentro y el modelo se está construyendo. El enlace del cliente funciona y le dice exactamente esto.- Müşteri onayında
wc-mevv-onay. La vista previa se ha enviado. El cliente puede aprobarla o pedir una corrección, tantas veces como haga falta.- Baskıda
wc-mevv-baski. Aprobado y en producción. El formulario de revisión desaparece de la pantalla, y en este punto el servidor también rechaza una petición de revisión, no solo la pantalla.
Qué estado puede seguir a cuál está escrito como una lista de movimientos permitidos, no de prohibidos. Un paso en el que nadie pensó se rechaza por defecto en lugar de permitirse en silencio, que es la diferencia entre una máquina de estados y una sugerencia.
Lo que ve el cliente
Un solo enlace, enviado por correo, que funciona sesenta días y no necesita cuenta. Pedirle a alguien que se registre antes de poder ver su propia vista previa es la forma más segura de perder la aprobación, así que el enlace lleva su propia autoridad: está firmado, nombra un pedido y ningún otro, y uno manipulado no abre nada.
La página muestra una pantalla distinta para cada estado y nunca se cachea: una página de aprobación cacheada mostraría la vista previa de un cliente al siguiente visitante. El enlace de aprobación aparece dos veces en cada correo, como botón y como texto plano, porque algunos clientes de correo no dibujan el botón.
- Pedido recibido: se envía al hacer el pedido, con el enlace.
- Vista previa lista: se envía cuando el operario la sube. Este es el correo que pide una decisión.
- Aprobación registrada: se envía cuando aprueba, y dice claramente que la producción ha empezado.
- Enviado: se envía cuando el operario lo marca como terminado.
Los correos se componen con la plantilla WooCommerce de tu propia tienda, así que se parecen al resto de tus mensajes y no a un añadido.
Las fotografías
Las subidas van a un directorio dentro de tu carpeta de uploads cuyo nombre no se puede adivinar, y están protegidas de cuatro formas a la vez: una regla .htaccess, un web.config para IIS, un index.php y permisos de archivo que solo permiten leerlos al propio sitio. Cuatro, porque cualquiera de ellas falta o se ignora en el servidor de alguien.
Un archivo se acepta por lo que son sus bytes, no por lo que afirma su nombre. Un ejecutable renombrado a .jpg se rechaza en la puerta: comprobar la extensión es comprobar los papeles que trae el atacante. Los tipos aceptados son JPEG, PNG, WebP y HEIC. El nombre guardado es aleatorio; el nombre original del cliente nunca llega al sistema de archivos, porque «ayse-dogum-gunu.jpg» es el nombre de una niña y una fecha.
Cada fotografía y cada vista previa se sirve por una única pasarela. A tu equipo lo admite su permiso de pedidos de WooCommerce; al cliente, el enlace firmado, verificado contra ese pedido. Un enlace creado para un pedido no puede abrir el archivo de otro. Los archivos nunca reciben una URL pública.
- Conservación
- Una tarea diaria borra las subidas y vistas previas de los pedidos terminados tras un plazo que tú fijas: sesenta días de fábrica, guardado en la opción
mevvatelier_retention_days. El pedido, su importe y su registro de aprobación se quedan; la fotografía no. - Qué sale de su servidor
- Nada de este plugin. Del circuito de pedidos no nos llega ninguna fotografía, ninguna vista previa, ningún pedido, ninguna telemetría ni ninguna llamada de licencia. La bóveda es un directorio en tu disco y el registro de aprobaciones son los metadatos de tus propios pedidos.
Guardar indefinidamente la foto de un niño en el servidor de una tienda es una responsabilidad, no una función. Si la promesa de conservación que diste a tus clientes no son sesenta días, cambia la opción para que coincida con lo que les dijiste: el número de tu página y el número del plugin deben ser el mismo número.
Aprobación, cancelación y derecho de desistimiento
Según la normativa turca de venta a distancia, un bien preparado conforme a las especificaciones del propio consumidor no da derecho de desistimiento una vez fabricado (Mesafeli Sözleşmeler Yönetmeliği, art. 15/1-b). MevvAtelier está construido alrededor de eso: al cliente se le dice en la pantalla de aprobación, y el momento en que acepta se escribe en el pedido junto con la aprobación.
Antes de la aprobación no se ha producido nada, así que una cancelación te cuesta un modelo y ningún material: cancela el pedido en WooCommerce y reembólsalo como cualquier otro. Tras la aprobación el formulario de revisión desaparece y el servidor rechaza una petición de revisión, porque en ese punto el material ya está comprometido.
Esto describe lo que registra el plugin, no es asesoramiento jurídico. Tu propio contrato de venta a distancia y tu formulario de información previa siguen teniendo que decir lo mismo, y MevvLegal es el plugin para esa parte.
Resolución de problemas
- El formulario de pedido se envía y no pasa nada
- Casi siempre, una copia cacheada de la página. El formulario lleva un token de un solo uso y una página cacheada reparte uno caducado, que se rechaza en silencio. Purga la página de tu caché y confirma que las cabeceras no-store del plugin llegan al navegador; algunas CDN las eliminan en el borde.
- El cliente dice que el enlace no funciona
- Tres causas, y la página dice cuál. Pasados sesenta días ha caducado y envías uno nuevo. Si se copió del correo a mano, normalmente falta un carácter. Si nombra otro pedido, se reenvió desde otro correo.
- En la administración las fotografías salen como imágenes rotas
- La bóveda se está sirviendo en lugar de controlarse: comprueba que el directorio de la bóveda sigue conservando su
.htaccessy suindex.php, y que tu alojamiento no ha restablecido los permisos. Si los archivos son accesibles por URL, esa es la mitad más urgente del problema. - Una subida se rechaza aunque es una fotografía
- Se está leyendo como algo que no es JPEG, PNG, WebP ni HEIC. Las capturas de pantalla del móvil y las imágenes exportadas por herramientas de diseño a menudo no lo son; volver a guardarlas como JPEG lo resuelve. Lo que se comprueba no es la extensión.
- Los pedidos no salen de «Model bekliyor»
- Nada los mueve por su cuenta: un operario sube la vista previa. Si la pantalla de cola está vacía para alguien de tu equipo, comprueba que tiene el permiso de edición de pedidos de la tienda; la pantalla se abre con eso y no con ser administrador.
- Las fotografías antiguas siguen en el disco
- La tarea de conservación corre sobre WP-Cron, que solo se dispara cuando alguien visita el sitio. En una tienda tranquila espera al tráfico, o apúntale un cron real del servidor. Comprueba también que esos pedidos están realmente terminados; los pedidos abiertos nunca se purgan.
- Los precios del formulario no son los que fijé
- Tu tabla guardada no superó la validación y el plugin volvió a sus valores por defecto en lugar de vender a un precio equivocado. Hay un aviso de administración que lo dice. Cada paquete necesita todos los recuentos de personas de uno a seis, y cada importe debe ser un número entero no negativo en unidades menores.
Cuando nos escribas, envía las versiones de WordPress, WooCommerce, PHP y del plugin, el número de pedido y cuál de los cuatro correos llegó y cuál no. No envíes las fotografías del cliente.