Ce qu’il fait
Un produit fabriqué pour une seule personne n’entre pas dans une fiche produit ordinaire. Le client doit vous envoyer une photographie, vous devez construire la pièce, et il doit la voir et l’accepter avant que vous ne dépensiez la matière. Fait à la main, c’est une chaîne d’e-mails, et la chaîne casse toujours au même endroit : personne ne peut dire avec certitude si le client a validé la version que vous avez réellement imprimée.
MevvAtelier fait de cette chaîne une partie de la commande. La commande porte les photographies, l’aperçu, la validation et son horodatage, et les états qu’elle traverse sont de vrais statuts de commande WooCommerce : ils apparaissent donc dans la liste des commandes, dans les rapports et dans les filtres que vous utilisez déjà.
- À utiliser quand
- Vous vendez quelque chose que vous produisez à la commande à partir de ce que le client vous envoie, et vous voulez que sa validation soit consignée avant le début de la production.
- Ce n’est pas une extension d’options de produit
- Il n’y a pas de matrice de variations ni de constructeur d’options par produit. C’est une seule chaîne, avec une seule page de configurateur, pour une gamme que vous fabriquez sur commande.
- Les photographies ne sont pas des pièces jointes de la médiathèque
- Ce sont des fichiers privés avec leur propre durée de conservation. La photo d’un client n’est pas une photo de produit et n’est pas traitée comme telle.
Prérequis : WordPress 6.0 ou plus récent, PHP 8.1 ou plus récent, et WooCommerce. Sans WooCommerce l’extension s’arrête d’elle-même et le dit — elle n’a pas de chaîne de commandes propre sur laquelle se rabattre.
Réglages, et la seule limite qui reste
Tout ce qu’une boutique modifie d’ordinaire se trouve sous Atölye → Ayarlar : le nom de chaque formule, son prix d’une à six personnes, les prix des deux options, la formule qui offre le kit de peinture, celle qui est cochée à l’ouverture de la page, et la durée de conservation des photographies.
Vous saisissez les prix en livres et l’extension les stocke en unités mineures entières. L’enregistrement est tout ou rien : si un champ ne peut être lu, aucun n’est écrit et l’écran vous dit lequel. Une demi-table de prix est une table qui casse au moment précis où un client commande.
- Renommer une formule
- Les noms livrés avec l’extension décrivent des figurines imprimées en 3D parce que c’est la boutique pour laquelle elle a été construite. Saisissez les vôtres — « Petit pendentif », « Plaque gravée », « Tirage A4 » — et c’est ce que voit le client. La clé interne à côté de chaque champ ne change jamais, donc les commandes existantes continuent de pointer au bon endroit.
- Vendre moins de cinq
- Laissez le nom d’une formule vide et elle disparaît du formulaire de commande, et le serveur la refuse si quelqu’un l’envoie quand même. Ses prix restent dans la table : la rallumer plus tard tient en un mot, pas en une ressaisie.
- Quelle formule est cochée à l’ouverture
- Une décision commerciale plutôt que technique : la formule intermédiaire ancre le client vers le haut, la moins chère vers le bas. Si celle que vous avez choisie est éteinte plus tard, le formulaire retombe sur la première formule encore active au lieu de s’ouvrir sans aucun prix.
LA LIMITE QUI RESTE : il y a cinq emplacements de formule. Vous pouvez les renommer, les tarifer et les éteindre, mais vous ne pouvez pas en ajouter un sixième. Si votre gamme en demande davantage, écrivez-nous en disant combien — c’est la prochaine chose en construction, et connaître le vrai nombre lui donne sa forme.
Installation
- Installez et activez d’abord WooCommerce. MevvAtelier refuse de démarrer sans lui.
- Installez MevvAtelier : téléversez le zip via Extensions → Ajouter, ou copiez le répertoire
mevvatelierdans/wp-content/plugins/. - Activez-le. À l’activation, l’extension enregistre ses statuts de commande, crée le répertoire du coffre photo et planifie la tâche quotidienne de conservation.
- Créez une page et placez-y le code court
[mevvatelier]. Cette page est votre formulaire de commande. - Passez une commande de test depuis la page, puis ouvrez Atölye dans le menu d’administration et parcourez-la une fois de bout en bout. Faites-le avant de faire la promotion de la page : le tour complet prend cinq minutes et c’est le seul moyen de voir les e-mails que votre boutique envoie réellement.
Les liens de validation sont signés avec un secret généré à la première utilisation et stocké dans votre propre base de données. Il ne quitte jamais votre serveur et n’est dérivé de rien que nous détenions.
Les trois codes courts
- [mevvatelier]
- Le formulaire de commande. Cinq étapes : formule, nombre de personnes dans la scène, photographies, coordonnées du client et case de consentement. Il affiche un total en cours pendant que le client choisit, et ce total n’est jamais ce avec quoi la commande est écrite — voir « Où résident les prix ».
- [mevvatelier_tanitim]
- Un bandeau promotionnel pour votre page d’accueil : un titre, un court texte et un bouton vers le formulaire de commande. Prend un identifiant de fichier joint :
[mevvatelier_tanitim gorsel="123"]. - [mevvatelier_gorsel]
- Une image de votre médiathèque rendue avec les tailles adaptatives que WordPress a déjà générées :
[mevvatelier_gorsel id="123" size="large"]. Il existe pour qu’une page promotionnelle n’imprime pas une photo de 2000 pixels dans un emplacement de 380 pixels sur un téléphone.
La page de commande désactive le cache de page pour elle-même, dans le langage que LiteSpeed, WP Rocket et W3 Total Cache comprennent tous, et envoie en plus des en-têtes no-store. Un formulaire de commande mis en cache s’envoie avec un jeton périmé et échoue en silence, ce qui ressemble pour le client à un formulaire qui ne fait rien.
Où résident les prix
Le prix d’une commande est calculé sur votre serveur à partir de la seule sélection du client. Un total envoyé par le navigateur est purement ignoré : demander au navigateur combien facturer est le chemin le plus court pour se faire acheter pour rien. L’argent est conservé en unités mineures entières (kuruş, centimes), jamais en décimal, de sorte qu’une longue commande ne peut pas dériver d’une unité entre la facture et la commande.
Vous les modifiez sous Atölye → Ayarlar, en livres, avec une virgule pour les kuruş. Chaque formule a besoin d’un prix pour chaque effectif pris en charge, de un à six. Toute la table est validée avant que quoi que ce soit ne soit écrit, et si un champ ne peut être lu l’écran vous dit lequel et n’en écrit aucun — une demi-table de prix est une table qui casse au moment précis où un client commande.
Le tout tient dans une seule option, mevvatelier_pricing, si vous préférez le déployer avec WP-CLI plutôt que cliquer. L’extension relit l’option après l’avoir écrite et refuse d’annoncer une réussite si la lecture ne correspond pas, car une boutique derrière un cache d’objets persistant peut sinon s’entendre dire « enregistré » tout en continuant à vendre à l’ancien prix.
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 ) );
'
Les clés internes des formules sont anahtarlik, orta, buyuk, anahtarlik_orta et uclu_set ; celles des options sont paint_kit et rush. C’est à elles que se réfèrent le code et vos commandes existantes, elles ne changent donc jamais — le nom que voit le client est un champ distinct que vous pouvez réécrire quand vous voulez.
La file de l’atelier
Atölye apparaît dans le menu d’administration pour quiconque peut modifier les commandes de la boutique. Il liste les commandes ouvertes en commençant par la plus ancienne et marque en rouge celles qui ont dépassé le délai promis : vingt-quatre heures normalement, six pour une commande urgente. La question à laquelle il répond n’est pas « qu’est-ce qui est ouvert » mais « qu’est-ce qui est en retard », la seule qui mérite un écran.
L’opérateur téléverse l’aperçu depuis la même ligne. Le téléversement range le fichier dans le coffre, enregistre une somme de contrôle de exactement ce qui a été montré, fait passer la commande à Müşteri onayında et envoie l’e-mail au client : une seule action, pas quatre choses à retenir.
- Model bekliyor
wc-mevv-model. Les photographies sont arrivées, le modèle est en cours de construction. Le lien du client fonctionne et lui dit exactement cela.- Müşteri onayında
wc-mevv-onay. L’aperçu a été envoyé. Le client peut le valider ou demander une correction, autant de fois qu’il le faut.- Baskıda
wc-mevv-baski. Validé et en production. Le formulaire de retouche a disparu de l’écran, et à ce stade le serveur refuse aussi une demande de retouche, pas seulement l’écran.
Quel état peut suivre lequel est écrit comme une liste de transitions autorisées plutôt qu’interdites. Une étape à laquelle personne n’a pensé est refusée par défaut au lieu d’être permise en silence : c’est la différence entre une machine à états et une suggestion.
Ce que voit le client
Un seul lien, envoyé par e-mail, valable soixante jours et sans compte requis. Demander à quelqu’un de s’inscrire avant de pouvoir regarder son propre aperçu est le moyen le plus sûr de perdre la validation ; le lien porte donc lui-même son autorisation : il est signé, il nomme une commande et aucune autre, et un lien altéré n’ouvre rien.
La page affiche un écran différent pour chaque état, et elle n’est jamais mise en cache : une page de validation en cache montrerait l’aperçu d’un client au visiteur suivant. Le lien de validation figure deux fois dans chaque e-mail, en bouton et en texte brut, car certains clients de messagerie n’affichent pas le bouton.
- Commande reçue — envoyé au moment de la commande, avec le lien.
- Aperçu prêt — envoyé quand l’opérateur le téléverse. C’est l’e-mail qui demande une décision.
- Validation enregistrée — envoyé lorsqu’il valide, et il dit clairement que la production a commencé.
- Expédié — envoyé lorsque l’opérateur marque la commande comme terminée.
Les e-mails passent par le modèle WooCommerce de votre propre boutique : ils ressemblent donc au reste de votre courrier et non à un ajout rapporté.
Les photographies
Les téléversements vont dans un répertoire sous votre dossier uploads dont le nom ne peut être deviné, et ils sont protégés de quatre façons à la fois : une règle .htaccess, un web.config pour IIS, un index.php et des permissions de fichier qui n’autorisent que le site à les lire. Quatre, parce que n’importe laquelle d’entre elles manque ou est ignorée sur le serveur de quelqu’un.
Un fichier est accepté pour ce que sont ses octets, pas pour ce que prétend son nom. Un exécutable renommé en .jpg est refusé à la porte : vérifier l’extension, c’est vérifier les papiers fournis par l’attaquant lui-même. Les types acceptés sont JPEG, PNG, WebP et HEIC. Le nom enregistré est aléatoire ; le nom de fichier d’origine du client n’atteint jamais le système de fichiers, car « ayse-dogum-gunu.jpg » est le prénom d’une enfant et une date.
Chaque photographie et chaque aperçu passe par une seule passerelle. Votre équipe est admise par sa permission de commandes WooCommerce ; le client par le lien signé, vérifié contre cette commande. Un lien fabriqué pour une commande ne peut pas ouvrir le fichier d’une autre. Les fichiers ne reçoivent jamais d’URL publique.
- Conservation
- Une tâche quotidienne supprime les téléversements et aperçus des commandes terminées après un délai que vous fixez : soixante jours par défaut, stocké dans l’option
mevvatelier_retention_days. La commande, son montant et son enregistrement de validation restent ; la photographie, non. - Ce qui quitte votre serveur
- Rien de cette extension. Aucune photographie, aucun aperçu, aucune commande, aucune télémétrie et aucun appel de licence ne nous parvient depuis la chaîne de commandes. Le coffre est un répertoire sur votre disque et le journal des validations est constitué de vos propres métadonnées de commande.
Garder indéfiniment la photo d’un enfant sur le serveur d’une boutique est une responsabilité, pas une fonctionnalité. Si la promesse de conservation faite à vos clients diffère de soixante jours, changez l’option pour qu’elle corresponde à ce que vous leur avez dit : le nombre sur votre page et le nombre dans l’extension doivent être le même nombre.
Validation, annulation et droit de rétractation
Selon la réglementation turque de la vente à distance, un bien préparé selon les spécifications propres du consommateur ne donne pas de droit de rétractation une fois fabriqué (Mesafeli Sözleşmeler Yönetmeliği, art. 15/1-b). MevvAtelier est construit autour de cela : le client en est informé sur l’écran de validation, et le moment où il l’accepte est écrit dans la commande avec la validation.
Avant la validation, rien n’a été produit : une annulation vous coûte un modèle et aucune matière — annulez la commande dans WooCommerce et remboursez-la comme n’importe quelle autre. Après la validation, le formulaire de retouche a disparu et le serveur refuse une demande de retouche, parce qu’à ce moment-là la matière est engagée.
Ceci décrit ce que l’extension consigne, ce n’est pas un conseil juridique. Votre propre contrat de vente à distance et votre formulaire d’information précontractuelle doivent dire la même chose, et MevvLegal est l’extension pour cette partie.
Dépannage
- Le formulaire de commande est envoyé et rien ne se passe
- Presque toujours une copie de la page en cache. Le formulaire porte un jeton à usage unique et une page en cache en distribue un périmé, qui est refusé en silence. Purgez la page de votre cache et vérifiez que les en-têtes no-store de l’extension arrivent au navigateur ; certains CDN les suppriment en périphérie.
- Le client dit que le lien ne fonctionne pas
- Trois causes, et la page dit laquelle. Passé soixante jours, il a expiré et vous en envoyez un nouveau. S’il a été recopié à la main depuis l’e-mail, il manque généralement un caractère. S’il nomme une autre commande, il a été transféré depuis un autre e-mail.
- Dans l’administration, les photographies apparaissent en images cassées
- Le coffre est servi au lieu d’être filtré : vérifiez que le répertoire du coffre contient toujours son
.htaccesset sonindex.php, et que votre hébergeur n’a pas réinitialisé les permissions. Si les fichiers sont accessibles par URL, c’est la moitié la plus urgente du problème. - Un téléversement est refusé alors que c’est bien une photographie
- Le fichier est lu comme autre chose que du JPEG, PNG, WebP ou HEIC. Les captures d’écran de téléphone et les images exportées par des outils de design ne le sont souvent pas ; les réenregistrer en JPEG règle la question. Ce n’est pas l’extension qui est vérifiée.
- Les commandes ne sortent pas de « Model bekliyor »
- Rien ne les fait avancer tout seul : c’est un opérateur qui téléverse l’aperçu. Si l’écran de file est vide pour quelqu’un de votre équipe, vérifiez qu’il a la permission de modifier les commandes de la boutique ; l’écran dépend de cela et non du fait d’être administrateur.
- D’anciennes photographies sont encore sur le disque
- La tâche de conservation s’exécute via WP-Cron, qui ne se déclenche que lorsque quelqu’un visite le site. Sur une boutique calme, elle attend le trafic — ou dirigez un vrai cron serveur vers elle. Vérifiez aussi que les commandes concernées sont réellement terminées ; les commandes ouvertes ne sont jamais purgées.
- Les prix du formulaire ne sont pas ceux que j’ai définis
- Votre table enregistrée n’a pas passé la validation et l’extension est revenue à ses valeurs par défaut plutôt que de vendre au mauvais prix. Un avis d’administration le signale. Chaque formule a besoin de tous les effectifs de un à six, et chaque montant doit être un entier non négatif en unités mineures.
Quand vous nous écrivez, envoyez les versions de WordPress, WooCommerce, PHP et de l’extension, le numéro de commande, et lequel des quatre e-mails est arrivé ou non. N’envoyez pas les photographies du client.