O que faz
Um produto feito para uma única pessoa não cabe numa página de produto normal. O cliente tem de lhe enviar uma fotografia, você tem de construir a peça, e ele tem de a ver e concordar antes de gastar material. Feito à mão, isso é uma cadeia de e-mails, e a cadeia parte-se sempre no mesmo sítio: ninguém pode dizer com certeza se o cliente aprovou a versão que realmente imprimiu.
O MevvAtelier torna essa cadeia parte da encomenda. A encomenda leva consigo as fotografias, a pré-visualização, a aprovação e a respetiva data e hora, e os estados por que passa são estados de encomenda reais do WooCommerce, por isso aparecem na lista de encomendas, nos relatórios e nos filtros que já usa.
- Use quando
- Vende algo que produz por encomenda a partir de algo que o cliente lhe envia, e quer a aprovação dele registada antes de a produção começar.
- Não é um plugin de opções de produto
- Não há matriz de variações nem construtor de opções por produto. É um único circuito, com uma única página de configurador, para uma linha de produtos que fabrica por encomenda.
- As fotografias não são anexos da biblioteca de media
- São ficheiros privados com o seu próprio prazo de conservação. A fotografia de um cliente não é a imagem de um produto e não é tratada como tal.
Requisitos: WordPress 6.0 ou mais recente, PHP 8.1 ou mais recente, e WooCommerce. Sem WooCommerce o plugin para-se a si próprio e di-lo — não tem um circuito de encomendas próprio a que recorrer.
Definições e o único limite que resta
Tudo o que uma loja costuma alterar está em Atölye → Ayarlar: como se chama cada pacote, quanto custa de uma a seis pessoas, os preços dos dois extras, que pacote leva o kit de pintura grátis, qual aparece selecionado ao abrir a página e durante quanto tempo as fotografias são guardadas.
Escreve os preços em liras e o plugin guarda-os como unidades menores inteiras. Guardar é tudo ou nada: se um campo não puder ser lido, nenhum é escrito e o ecrã diz-lhe qual. Meia tabela de preços é uma tabela que parte no momento exato em que um cliente está a encomendar.
- Mudar o nome de um pacote
- Os nomes que vêm com o plugin descrevem figuras impressas em 3D porque foi essa a loja para a qual foi construído. Escreva os seus — «Pendente pequeno», «Placa gravada», «Impressão A4» — e é isso que o cliente vê. A chave interna ao lado de cada campo nunca muda, por isso as encomendas existentes continuam a apontar para a coisa certa.
- Vender menos de cinco
- Deixe o nome de um pacote vazio e ele desaparece do formulário de encomenda, sendo recusado pelo servidor se alguém o submeter mesmo assim. Os seus preços ficam na tabela, por isso voltar a ligá-lo mais tarde é uma palavra, não uma reescrita.
- Que pacote aparece selecionado
- Uma decisão comercial e não técnica: o escalão intermédio ancora o cliente para cima, o mais barato ancora-o para baixo. Se o que escolheu for desligado mais tarde, o formulário recorre ao primeiro pacote ainda ativo em vez de abrir sem preço nenhum.
O LIMITE QUE RESTA: há cinco lugares de pacote. Pode renomeá-los, dar-lhes preço e desligá-los, mas não pode acrescentar um sexto. Se a sua linha precisar de mais, escreva-nos a dizer quantos — é isso o que está a ser construído a seguir, e saber o número real dá-lhe forma.
Instalação
- Instale e ative primeiro o WooCommerce. O MevvAtelier recusa-se a arrancar sem ele.
- Instale o MevvAtelier: carregue o zip através de Plugins → Adicionar novo, ou copie o diretório
mevvatelierpara/wp-content/plugins/. - Ative-o. Na ativação o plugin regista os seus estados de encomenda, cria o diretório do cofre de fotos e agenda a tarefa diária de conservação.
- Crie uma página e coloque nela o shortcode
[mevvatelier]. Essa página é o seu formulário de encomenda. - Faça uma encomenda de teste através da página, depois abra Atölye no menu de administração e percorra-a uma vez do princípio ao fim. Faça isto antes de divulgar a página: o percurso leva cinco minutos e é a única forma de ver os e-mails que a sua loja envia realmente.
As ligações de aprovação são assinadas com um segredo gerado na primeira utilização e guardado na sua própria base de dados. Nunca sai do seu servidor e não é derivado de nada que nós tenhamos.
Os três shortcodes
- [mevvatelier]
- O formulário de encomenda. Cinco passos: pacote, quantas pessoas há na cena, as fotografias, os dados do cliente e uma caixa de consentimento. Mostra um total em curso enquanto o cliente escolhe, e esse total nunca é aquilo com que a encomenda é escrita — ver «Onde ficam os preços».
- [mevvatelier_tanitim]
- Uma faixa promocional para a sua página inicial: um título, um texto curto e um botão para o formulário de encomenda. Aceita um id de anexo:
[mevvatelier_tanitim gorsel="123"]. - [mevvatelier_gorsel]
- Uma imagem da sua biblioteca de media apresentada com os tamanhos adaptativos que o WordPress já gerou:
[mevvatelier_gorsel id="123" size="large"]. Existe para que uma página promocional não imprima uma fotografia de 2000 píxeis num espaço de 380 píxeis num telemóvel.
A página de encomenda desliga a cache de página para si própria, na linguagem que o LiteSpeed, o WP Rocket e o W3 Total Cache entendem igualmente, e envia ainda cabeçalhos no-store. Um formulário de encomenda em cache é enviado com um token caducado e falha em silêncio, o que para o cliente parece um formulário que não faz nada.
Onde ficam os preços
O preço de uma encomenda é calculado no seu servidor apenas a partir da seleção do cliente. Um total enviado pelo navegador é simplesmente ignorado: perguntar ao navegador quanto cobrar é o caminho mais curto para lhe comprarem por nada. O dinheiro é guardado em unidades menores inteiras (kuruş, cêntimos), nunca como decimal, por isso uma encomenda longa não pode desviar-se uma unidade entre a fatura e a encomenda.
Edita-os em Atölye → Ayarlar, em liras, com vírgula para os kuruş. Cada pacote precisa de um preço para cada número de pessoas suportado, de um a seis. A tabela inteira é validada antes de se escrever seja o que for e, se um campo não puder ser lido, o ecrã diz-lhe qual e não escreve nenhum — meia tabela de preços é uma tabela que parte no momento exato em que um cliente está a encomendar.
Tudo cabe numa única opção, mevvatelier_pricing, se preferir implantá-la com WP-CLI em vez de clicar. O plugin volta a ler a opção depois de a escrever e recusa-se a comunicar sucesso se a leitura não coincidir, porque a uma loja com cache de objetos persistente pode dizer-se «guardado» enquanto continua a vender ao preço antigo.
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 ) );
'
As chaves internas dos pacotes são anahtarlik, orta, buyuk, anahtarlik_orta e uclu_set; as dos extras são paint_kit e rush. É a elas que o código e as suas encomendas existentes se referem, por isso nunca mudam — o nome que o cliente vê é um campo separado que pode reescrever quando quiser.
A fila da oficina
Atölye aparece no menu de administração para quem possa editar encomendas da loja. Lista as encomendas abertas a começar pela mais antiga e marca a vermelho as que ultrapassaram o prazo prometido: vinte e quatro horas normalmente, seis numa encomenda urgente. A pergunta a que responde não é «o que está aberto» mas «o que está atrasado», a única que merece um ecrã.
O operador carrega a pré-visualização a partir da mesma linha. O carregamento guarda o ficheiro no cofre, regista uma soma de verificação exatamente do que foi mostrado, passa a encomenda a Müşteri onayında e envia o e-mail ao cliente — uma só ação, não quatro coisas para lembrar.
- Model bekliyor
wc-mevv-model. As fotografias chegaram, o modelo está a ser construído. A ligação do cliente funciona e diz-lhe exatamente isto.- Müşteri onayında
wc-mevv-onay. A pré-visualização foi enviada. O cliente pode aprová-la ou pedir uma correção, as vezes que forem precisas.- Baskıda
wc-mevv-baski. Aprovado e em produção. O formulário de revisão desapareceu do ecrã, e nesta fase o servidor também recusa um pedido de revisão, não apenas o ecrã.
Que estado pode seguir-se a qual está escrito como uma lista de transições permitidas e não de proibidas. Um passo em que ninguém pensou é recusado por omissão em vez de permitido em silêncio — é essa a diferença entre uma máquina de estados e uma sugestão.
O que o cliente vê
Uma ligação, enviada por e-mail, que funciona sessenta dias e não precisa de conta. Pedir a alguém que se registe antes de poder ver a sua própria pré-visualização é a forma mais segura de perder a aprovação, por isso a ligação leva a sua própria autoridade: é assinada, nomeia uma encomenda e mais nenhuma, e uma adulterada não abre nada.
A página mostra um ecrã diferente para cada estado e nunca é colocada em cache: uma página de aprovação em cache mostraria a pré-visualização de um cliente ao visitante seguinte. A ligação de aprovação aparece duas vezes em cada e-mail, como botão e como texto simples, porque alguns clientes de correio não desenham o botão.
- Encomenda recebida — enviado quando a encomenda é feita, com a ligação.
- Pré-visualização pronta — enviado quando o operador a carrega. É este o e-mail que pede uma decisão.
- Aprovação registada — enviado quando ele aprova, e diz claramente que a produção começou.
- Expedido — enviado quando o operador marca a encomenda como concluída.
Os e-mails são compostos com o modelo WooCommerce da sua própria loja, por isso parecem-se com o resto do seu correio e não com um acrescento.
As fotografias
Os carregamentos vão para um diretório dentro da sua pasta uploads cujo nome não pode ser adivinhado, e estão protegidos de quatro formas ao mesmo tempo: uma regra .htaccess, um web.config para IIS, um index.php e permissões de ficheiro que só deixam o próprio site ler. Quatro, porque qualquer uma delas falta ou é ignorada no servidor de alguém.
Um ficheiro é aceite pelo que são os seus bytes, não pelo que o nome afirma. Um executável renomeado para .jpg é recusado à porta: verificar a extensão é verificar os papéis do próprio atacante. Os tipos aceites são JPEG, PNG, WebP e HEIC. O nome guardado é aleatório; o nome de ficheiro original do cliente nunca chega ao sistema de ficheiros, porque «ayse-dogum-gunu.jpg» é o nome de uma criança e uma data.
Cada fotografia e cada pré-visualização é servida por uma única porta. A sua equipa é admitida pela permissão de encomendas do WooCommerce; o cliente pela ligação assinada, verificada contra essa encomenda. Uma ligação criada para uma encomenda não pode abrir o ficheiro de outra. Os ficheiros nunca recebem um URL público.
- Conservação
- Uma tarefa diária apaga os carregamentos e as pré-visualizações das encomendas concluídas depois de um prazo definido por si: sessenta dias de origem, guardado na opção
mevvatelier_retention_days. A encomenda, o seu valor e o registo de aprovação ficam; a fotografia não. - O que sai do seu servidor
- Nada deste plugin. Do circuito de encomendas não nos chega nenhuma fotografia, nenhuma pré-visualização, nenhuma encomenda, nenhuma telemetria e nenhuma chamada de licença. O cofre é um diretório no seu disco e o registo de aprovações são os metadados das suas próprias encomendas.
Guardar indefinidamente a foto de uma criança no servidor de uma loja é uma responsabilidade, não uma funcionalidade. Se a promessa de conservação que deu aos clientes não forem sessenta dias, mude a opção para corresponder ao que lhes disse: o número na sua página e o número no plugin devem ser o mesmo número.
Aprovação, cancelamento e direito de retratação
Segundo o regulamento turco de venda à distância, um bem preparado de acordo com as especificações do próprio consumidor não confere direito de retratação depois de feito (Mesafeli Sözleşmeler Yönetmeliği, art. 15/1-b). O MevvAtelier está construído à volta disso: o cliente é informado no ecrã de aprovação, e o momento em que concorda é escrito na encomenda juntamente com a aprovação.
Antes da aprovação nada foi produzido, por isso um cancelamento custa-lhe um modelo e nenhum material — cancele a encomenda no WooCommerce e reembolse-a como faria com qualquer outra. Depois da aprovação o formulário de revisão desapareceu e o servidor recusa um pedido de revisão, porque nessa altura o material já está comprometido.
Isto descreve o que o plugin regista, não é aconselhamento jurídico. O seu próprio contrato de venda à distância e o formulário de informação prévia continuam a ter de dizer o mesmo, e o MevvLegal é o plugin para essa parte.
Solução de problemas
- O formulário de encomenda é enviado e não acontece nada
- Quase sempre uma cópia da página em cache. O formulário leva um token de uso único e uma página em cache distribui um caducado, que é recusado em silêncio. Limpe a página da sua cache e confirme que os cabeçalhos no-store do plugin chegam ao navegador; algumas CDN removem-nos na periferia.
- O cliente diz que a ligação não funciona
- Três causas, e a página diz qual. Passados sessenta dias expirou e envia uma nova. Se foi copiada do e-mail à mão, falta normalmente um carácter. Se nomeia outra encomenda, foi reencaminhada a partir de outro e-mail.
- Na administração as fotografias aparecem como imagens partidas
- O cofre está a ser servido em vez de filtrado: verifique se o diretório do cofre ainda tem o seu
.htaccesse oindex.php, e se o seu alojamento não repôs as permissões. Se os ficheiros forem acessíveis por URL, essa é a metade mais urgente do problema. - Um carregamento é recusado apesar de ser uma fotografia
- Está a ser lido como algo que não é JPEG, PNG, WebP nem HEIC. As capturas de ecrã de telemóvel e as imagens exportadas por ferramentas de design muitas vezes não o são; voltar a guardar como JPEG resolve. O que é verificado não é a extensão.
- As encomendas não saem de «Model bekliyor»
- Nada as move sozinho — é um operador que carrega a pré-visualização. Se o ecrã da fila estiver vazio para alguém da sua equipa, verifique se tem a permissão de edição de encomendas da loja; o ecrã depende disso e não de ser administrador.
- Continuam fotografias antigas no disco
- A tarefa de conservação corre sobre WP-Cron, que só dispara quando alguém visita o site. Numa loja calma espera pelo tráfego — ou aponte-lhe um cron real do servidor. Verifique também se essas encomendas estão mesmo concluídas; encomendas abertas nunca são apagadas.
- Os preços no formulário não são os que defini
- A sua tabela guardada não passou na validação e o plugin voltou aos valores por omissão em vez de vender ao preço errado. Há um aviso de administração a dizê-lo. Cada pacote precisa de todos os números de pessoas de um a seis, e cada valor tem de ser um número inteiro não negativo em unidades menores.
Quando nos escrever, envie as versões do WordPress, WooCommerce, PHP e do plugin, o número da encomenda, e qual dos quatro e-mails chegou e qual não chegou. Não envie as fotografias do cliente.