MevvAtelier-Dokumentation

Nichts geht in Produktion, bevor der Kunde Ja sagt.

MevvAtelier setzt einen Ablauf für Auftragsfertigung in WooCommerce: einen Konfigurator, der den Preis auf Ihrem Server berechnet, einen Tresor, den die hochgeladenen Fotos nie verlassen, einen signierten Link, den der Kunde ohne Konto öffnet, um die Vorschau freizugeben, vier Bestellzustände, die sich nur vorwärts bewegen, und eine Werkstatt-Warteschlange, die zeigt, was überfällig ist. Dieser Leitfaden behandelt die Installation, die Seiten, die Sie anlegen, wo die Preise liegen, die Warteschlange, was der Kunde sieht und was zu prüfen ist, wenn etwas nicht funktioniert.

Was es tut

Ein Produkt, das für eine einzige Person gemacht wird, passt nicht auf eine normale Produktseite. Der Kunde muss ein Foto schicken, Sie müssen das Stück bauen, und er muss es sehen und zustimmen, bevor Sie Material verbrauchen. Von Hand ist das eine Kette von E-Mails, und die Kette reißt jedes Mal an derselben Stelle: niemand kann mit Sicherheit sagen, ob der Kunde die Version freigegeben hat, die Sie tatsächlich gedruckt haben.

MevvAtelier macht diese Kette zum Teil der Bestellung. Die Bestellung trägt die Fotos, die Vorschau, die Freigabe und deren Zeitstempel bei sich, und die Zustände, die sie durchläuft, sind echte WooCommerce-Bestellstatus – sie tauchen also in der Bestellliste, in Berichten und in den Filtern auf, die Sie bereits nutzen.

Setzen Sie es ein, wenn
Sie verkaufen etwas, das Sie pro Bestellung aus etwas fertigen, das der Kunde schickt, und Sie wollen seine Freigabe dokumentiert haben, bevor die Produktion beginnt.
Es ist kein Plugin für Produktoptionen
Es gibt keine Variationsmatrix und keinen Optionsbaukasten pro Produkt. Es ist ein Ablauf mit einer Konfiguratorseite für eine Produktlinie, die Sie auf Bestellung fertigen.
Die Fotos sind keine Anhänge der Mediathek
Es sind private Dateien mit eigener Aufbewahrungsfrist. Das Foto eines Kunden ist kein Produktbild und wird auch nicht wie eines behandelt.

Voraussetzungen: WordPress 6.0 oder neuer, PHP 8.1 oder neuer und WooCommerce. Ohne WooCommerce stoppt sich das Plugin selbst und sagt das auch – es hat keinen eigenen Bestellablauf, auf den es zurückfallen könnte.

Einstellungen – und die eine Grenze, die bleibt

Alles, was ein Shop normalerweise ändert, liegt unter Atölye → Ayarlar: wie jedes Paket heißt, was es für eine bis sechs Personen kostet, die Preise der beiden Zusatzoptionen, welches Paket das Farbset gratis bekommt, welches beim Öffnen der Seite ausgewählt ist und wie lange Fotos aufbewahrt werden.

Sie tippen Preise in Lira, das Plugin speichert sie als ganze Untereinheiten. Speichern ist ganz oder gar nicht: lässt sich ein Feld nicht lesen, wird keines geschrieben und der Bildschirm sagt Ihnen, welches. Eine halbe Preistabelle ist eine Tabelle, die genau dann bricht, wenn ein Kunde bestellt.

Ein Paket umbenennen
Die mitgelieferten Namen beschreiben 3D-gedruckte Figuren, weil das der Shop war, für den es gebaut wurde. Tippen Sie Ihre eigenen – „Kleiner Anhänger“, „Gravierte Plakette“, „A4-Druck“ – und genau das sieht der Kunde. Der interne Schlüssel neben jedem Feld ändert sich nie, also zeigen bestehende Bestellungen weiter auf das Richtige.
Weniger als fünf verkaufen
Lassen Sie den Namen eines Pakets leer, dann verschwindet es aus dem Bestellformular, und der Server weist es ab, falls es trotzdem jemand absendet. Seine Preise bleiben in der Tabelle, das spätere Wiedereinschalten ist also ein Wort und keine Neueingabe.
Welches Paket vorausgewählt ist
Eine kaufmännische Entscheidung, keine technische: die mittlere Stufe verankert den Kunden nach oben, die billigste nach unten. Wird die gewählte später abgeschaltet, fällt das Formular auf das erste noch aktive Paket zurück, statt ganz ohne Preis zu öffnen.

DIE GRENZE, DIE BLEIBT: es gibt fünf Paketplätze. Sie können sie umbenennen, bepreisen und abschalten, aber keinen sechsten hinzufügen. Braucht Ihre Linie mehr, schreiben Sie uns und sagen Sie wie viele – das ist das Nächste, was gebaut wird, und die echte Zahl zu kennen formt es.

Installation

  1. Installieren und aktivieren Sie zuerst WooCommerce. MevvAtelier weigert sich, ohne es zu starten.
  2. Installieren Sie MevvAtelier: laden Sie das ZIP über Plugins → Installieren hoch oder kopieren Sie das Verzeichnis mevvatelier nach /wp-content/plugins/.
  3. Aktivieren Sie es. Bei der Aktivierung registriert das Plugin seine Bestellstatus, legt das Verzeichnis des Fototresors an und plant den täglichen Aufbewahrungsjob.
  4. Legen Sie eine Seite an und setzen Sie den Shortcode [mevvatelier] hinein. Diese Seite ist Ihr Bestellformular.
  5. Geben Sie über die Seite eine Testbestellung auf, öffnen Sie dann Atölye im Adminmenü und gehen Sie sie einmal komplett durch. Tun Sie das, bevor Sie für die Seite werben – der Durchlauf dauert fünf Minuten und ist der einzige Weg, die E-Mails zu sehen, die Ihr Shop tatsächlich sendet.

Die Freigabelinks werden mit einem Geheimnis signiert, das bei der ersten Nutzung erzeugt und in Ihrer eigenen Datenbank gespeichert wird. Es verlässt Ihren Server nie und ist aus nichts abgeleitet, was wir besitzen.

Die drei Shortcodes

[mevvatelier]
Das Bestellformular. Fünf Schritte: Paket, wie viele Personen in der Szene sind, die Fotos, die Kundendaten und ein Einwilligungsfeld. Es zeigt eine laufende Summe, während der Kunde auswählt, und diese Summe ist nie das, womit die Bestellung geschrieben wird – siehe „Wo die Preise liegen“.
[mevvatelier_tanitim]
Ein Werbeband für Ihre Startseite – eine Überschrift, ein kurzer Text und eine Schaltfläche zum Bestellformular. Nimmt eine Anhang-ID: [mevvatelier_tanitim gorsel="123"].
[mevvatelier_gorsel]
Ein Bild aus Ihrer Mediathek, ausgegeben mit den responsiven Größen, die WordPress ohnehin erzeugt hat: [mevvatelier_gorsel id="123" size="large"]. Es existiert, damit eine Werbeseite nicht ein 2000-Pixel-Foto in einen 380-Pixel-Platz auf dem Handy druckt.

Die Bestellseite schaltet das Seiten-Caching für sich selbst ab, in der Sprache, die LiteSpeed, WP Rocket und W3 Total Cache gleichermaßen verstehen, und sendet zusätzlich no-store-Header. Ein zwischengespeichertes Bestellformular sendet mit einem veralteten Token und scheitert lautlos – für den Kunden sieht das aus wie ein Formular, das nichts tut.

Wo die Preise liegen

Der Preis einer Bestellung wird auf Ihrem Server allein aus der Auswahl des Kunden berechnet. Eine vom Browser gesendete Summe wird schlicht ignoriert – den Browser zu fragen, was zu berechnen ist, ist der kürzeste Weg dahin, für nichts zu verkaufen. Geld wird in ganzen Untereinheiten gehalten (Kuruş, Cent), nie als Dezimalzahl, sodass eine lange Bestellung zwischen Rechnung und Auftrag nicht um eine Einheit abweichen kann.

Sie bearbeiten sie unter Atölye → Ayarlar, in Lira, mit Komma für die Kuruş. Jedes Paket braucht einen Preis für jede unterstützte Personenzahl, eins bis sechs. Die ganze Tabelle wird geprüft, bevor irgendetwas geschrieben wird, und lässt sich ein Feld nicht lesen, sagt der Bildschirm welches und schreibt keines – eine halbe Preistabelle ist eine Tabelle, die genau dann bricht, wenn ein Kunde bestellt.

Das Ganze steckt in einer einzigen Option, mevvatelier_pricing, falls Sie es lieber per WP-CLI ausrollen als klicken. Das Plugin liest die Option nach dem Schreiben zurück und meldet keinen Erfolg, wenn das Gelesene nicht passt – denn einem Shop mit persistentem Objekt-Cache kann sonst „gespeichert“ gesagt werden, während er weiter zum alten Preis verkauft.

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

Die internen Paketschlüssel sind anahtarlik, orta, buyuk, anahtarlik_orta und uclu_set; die Zusatzschlüssel sind paint_kit und rush. Darauf beziehen sich der Code und Ihre bestehenden Bestellungen, deshalb ändern sie sich nie – der Name, den der Kunde sieht, ist ein eigenes Feld, das Sie jederzeit neu schreiben können.

Die Werkstatt-Warteschlange

Atölye erscheint im Adminmenü für jeden, der Shop-Bestellungen bearbeiten darf. Es listet offene Bestellungen mit der ältesten zuerst und markiert die überfälligen rot – normalerweise vierundzwanzig Stunden, bei Eilaufträgen sechs. Die Frage, die es beantwortet, ist nicht „was ist offen“, sondern „was ist überfällig“ – und nur die lohnt einen Bildschirm.

Der Mitarbeiter lädt die Vorschau aus derselben Zeile hoch. Das Hochladen legt die Datei im Tresor ab, speichert eine Prüfsumme genau dessen, was gezeigt wurde, setzt die Bestellung auf Müşteri onayında und schickt dem Kunden die E-Mail – eine Aktion, nicht vier Dinge zum Merken.

Model bekliyor
wc-mevv-model. Die Fotos sind da, das Modell wird gebaut. Der Link des Kunden funktioniert und sagt ihm genau das.
Müşteri onayında
wc-mevv-onay. Die Vorschau ist verschickt. Der Kunde kann sie freigeben oder eine Korrektur verlangen, so oft es nötig ist.
Baskıda
wc-mevv-baski. Freigegeben und in Produktion. Das Korrekturformular ist vom Bildschirm verschwunden, und der Server weist eine Korrekturanfrage an diesem Punkt ebenfalls ab – nicht nur der Bildschirm.

Welcher Zustand auf welchen folgen darf, ist als Liste der erlaubten Übergänge geschrieben, nicht der verbotenen. Ein Schritt, an den niemand gedacht hat, wird standardmäßig abgelehnt statt stillschweigend erlaubt – das ist der Unterschied zwischen einem Zustandsautomaten und einer Empfehlung.

Was der Kunde sieht

Ein Link, per E-Mail geschickt, der sechzig Tage funktioniert und kein Konto braucht. Jemanden zur Registrierung aufzufordern, bevor er seine eigene Vorschau ansehen darf, ist der sicherste Weg, die Freigabe zu verlieren – deshalb trägt der Link seine Berechtigung selbst: er ist signiert, er nennt genau eine Bestellung und keine andere, und ein manipulierter öffnet gar nichts.

Die Seite zeigt für jeden Zustand einen anderen Bildschirm und wird nie zwischengespeichert – eine zwischengespeicherte Freigabeseite würde die Vorschau eines Kunden dem nächsten Besucher zeigen. Der Freigabelink steht in jeder E-Mail zweimal, als Schaltfläche und als reiner Text, weil manche Mail-Clients die Schaltfläche nicht darstellen.

  • Bestellung eingegangen – wird beim Aufgeben der Bestellung mit dem Link verschickt.
  • Vorschau bereit – wird verschickt, wenn der Mitarbeiter sie hochlädt. Das ist die E-Mail, die eine Entscheidung verlangt.
  • Freigabe erfasst – wird bei der Freigabe verschickt und sagt klar, dass die Produktion begonnen hat.
  • Versandt – wird verschickt, wenn der Mitarbeiter die Bestellung als fertig markiert.

Die E-Mails werden durch die WooCommerce-Vorlage Ihres eigenen Shops geführt, sehen also aus wie Ihre übrige Post und nicht wie etwas Angeflanschtes.

Die Fotos

Uploads landen in einem Verzeichnis unterhalb Ihres uploads-Ordners, dessen Name nicht zu erraten ist, und sind vierfach zugleich geschützt: eine .htaccess-Regel, eine web.config für IIS, eine index.php und Dateirechte, die nichts außer der Website lesen lassen. Vier, weil jede einzelne davon auf irgendjemandes Server fehlt oder ignoriert wird.

Eine Datei wird danach angenommen, was ihre Bytes sind, nicht was ihr Name behauptet. Eine in .jpg umbenannte ausführbare Datei wird an der Tür abgewiesen – die Endung zu prüfen heißt, die Papiere des Angreifers zu prüfen. Angenommen werden JPEG, PNG, WebP und HEIC. Der gespeicherte Name ist zufällig; der ursprüngliche Dateiname des Kunden erreicht das Dateisystem nie, denn „ayse-dogum-gunu.jpg“ ist der Name eines Kindes und ein Datum.

Jedes Foto und jede Vorschau wird über ein einziges Gateway ausgeliefert. Ihr Team wird über seine WooCommerce-Bestellberechtigung eingelassen, der Kunde über den signierten Link, der gegen diese Bestellung geprüft wird. Ein für eine Bestellung erzeugter Link kann die Datei einer anderen nicht öffnen. Die Dateien erhalten nie eine öffentliche URL.

Aufbewahrung
Ein täglicher Job löscht die Uploads und Vorschauen abgeschlossener Bestellungen nach einer von Ihnen gesetzten Frist – ab Werk sechzig Tage, gespeichert in der Option mevvatelier_retention_days. Die Bestellung, ihr Betrag und der Freigabeeintrag bleiben; das Foto nicht.
Was Ihren Server verlässt
Nichts aus diesem Plugin. Aus dem Bestellablauf erreicht uns kein Foto, keine Vorschau, keine Bestellung, keine Telemetrie und kein Lizenzaufruf. Der Tresor ist ein Verzeichnis auf Ihrer Platte, und das Freigabeprotokoll sind Ihre eigenen Bestell-Metadaten.

Das Foto eines Kindes unbegrenzt auf einem Shop-Server zu behalten, ist eine Haftung, kein Feature. Wenn Ihr Aufbewahrungsversprechen an die Kunden von sechzig Tagen abweicht, ändern Sie die Option so, dass sie zu dem passt, was Sie ihnen gesagt haben – die Zahl auf Ihrer Seite und die Zahl im Plugin sollten dieselbe sein.

Freigabe, Stornierung und Widerrufsrecht

Nach der türkischen Fernabsatzverordnung besteht bei einer nach den Vorgaben des Verbrauchers gefertigten Ware nach der Herstellung kein Widerrufsrecht (Mesafeli Sözleşmeler Yönetmeliği, Art. 15/1-b). MevvAtelier ist darum herum gebaut: dem Kunden wird das auf der Freigabeseite gesagt, und der Moment seiner Zustimmung wird zusammen mit der Freigabe in die Bestellung geschrieben.

Vor der Freigabe ist nichts produziert worden, eine Stornierung kostet Sie also ein Modell und kein Material – stornieren Sie die Bestellung in WooCommerce und erstatten Sie sie wie jede andere. Nach der Freigabe ist das Korrekturformular verschwunden und der Server weist eine Korrekturanfrage ab, weil das Material zu diesem Zeitpunkt gebunden ist.

Dies beschreibt, was das Plugin festhält, und ist keine Rechtsberatung. Ihr eigener Fernabsatzvertrag und Ihr Vorabinformationsformular müssen dasselbe sagen – und MevvLegal ist das Plugin für diesen Teil.

Fehlerbehebung

Das Bestellformular wird abgeschickt und nichts passiert
Fast immer eine zwischengespeicherte Kopie der Seite. Das Formular trägt ein Einmal-Token, und eine zwischengespeicherte Seite gibt ein veraltetes aus, das lautlos abgelehnt wird. Leeren Sie die Seite aus Ihrem Cache und prüfen Sie, ob die no-store-Header des Plugins beim Browser ankommen; manche CDNs entfernen sie am Rand.
Der Kunde sagt, der Link funktioniert nicht
Drei Ursachen, und die Seite sagt welche. Nach sechzig Tagen ist er abgelaufen und Sie schicken einen neuen. Wurde er per Hand aus der E-Mail kopiert, fehlt meist ein Zeichen. Nennt er eine andere Bestellung, wurde er aus einer anderen E-Mail weitergeleitet.
Im Adminbereich erscheinen die Fotos als kaputte Bilder
Der Tresor wird ausgeliefert statt kontrolliert – prüfen Sie, ob das Tresorverzeichnis noch seine .htaccess und index.php hat und ob Ihr Hoster die Rechte nicht zurückgesetzt hat. Sind die Dateien per URL erreichbar, ist das die dringendere Hälfte des Problems.
Ein Upload wird abgelehnt, obwohl es ein Foto ist
Sie wird als etwas anderes gelesen als JPEG, PNG, WebP oder HEIC. Handy-Screenshots und aus Designwerkzeugen exportierte Bilder sind das oft nicht; erneutes Speichern als JPEG erledigt es. Geprüft wird nicht die Dateiendung.
Bestellungen verlassen „Model bekliyor“ nicht
Nichts bewegt sie von selbst – ein Mitarbeiter lädt die Vorschau hoch. Ist der Warteschlangenbildschirm für jemanden in Ihrem Team leer, prüfen Sie, ob er die Berechtigung zum Bearbeiten von Shop-Bestellungen hat; der Bildschirm hängt daran und nicht daran, Administrator zu sein.
Alte Fotos liegen noch auf der Platte
Der Aufbewahrungsjob läuft über WP-Cron, das nur auslöst, wenn jemand die Website besucht. In einem ruhigen Shop wartet er auf Verkehr – oder richten Sie einen echten Server-Cron darauf. Prüfen Sie außerdem, ob die betreffenden Bestellungen wirklich abgeschlossen sind; offene Bestellungen werden nie gelöscht.
Die Preise im Formular sind nicht die, die ich gesetzt habe
Ihre gespeicherte Tabelle hat die Validierung nicht bestanden, und das Plugin ist auf seine Standardwerte zurückgefallen, statt zum falschen Preis zu verkaufen. Es gibt einen Admin-Hinweis, der das sagt. Jedes Paket braucht jede Personenzahl von eins bis sechs, und jeder Betrag muss eine nicht-negative ganze Zahl in Untereinheiten sein.

Wenn Sie uns schreiben, schicken Sie die Versionen von WordPress, WooCommerce, PHP und dem Plugin, die Bestellnummer und welche der vier E-Mails angekommen ist und welche nicht. Schicken Sie nicht die Fotos des Kunden.