Dokumentacja MevvAtelier

Nic nie trafia do produkcji, dopóki klient nie powie „tak”.

MevvAtelier umieszcza łańcuch produkcji na zamówienie wewnątrz WooCommerce: konfigurator liczący cenę na twoim serwerze, skarbiec, z którego wgrane zdjęcia nigdy nie wychodzą, podpisany odnośnik, który klient otwiera bez konta, by zatwierdzić podgląd, cztery stany zamówienia idące tylko naprzód oraz kolejkę pracowni pokazującą, co jest spóźnione. Ten przewodnik obejmuje instalację, tworzone przez ciebie strony, miejsce, w którym leżą ceny, kolejkę, to, co widzi klient, oraz co sprawdzić, gdy coś nie działa.

Co robi

Produkt zrobiony dla jednej osoby nie mieści się na zwykłej stronie produktu. Klient musi przysłać fotografię, ty musisz zbudować rzecz, a on musi ją zobaczyć i się zgodzić, zanim zużyjesz materiał. Robione ręcznie jest to łańcuch e-maili, a łańcuch pęka za każdym razem w tym samym miejscu: nikt nie potrafi z pewnością powiedzieć, czy klient zatwierdził tę wersję, którą naprawdę wydrukowałeś.

MevvAtelier czyni ten łańcuch częścią zamówienia. Zamówienie niesie na sobie fotografie, podgląd, akceptację i jej znacznik czasu, a stany, przez które przechodzi, to prawdziwe statusy zamówień WooCommerce — pojawiają się więc na liście zamówień, w raportach i w filtrach, których już używasz.

Kiedy jej używać
Sprzedajesz coś, co wykonujesz pod każde zamówienie z tego, co przysyła klient, i chcesz mieć jego akceptację zapisaną, zanim ruszy produkcja.
To nie jest wtyczka do opcji produktu
Nie ma tu macierzy wariantów ani kreatora opcji dla każdego produktu. To jeden łańcuch, z jedną stroną konfiguratora, dla linii produktów wykonywanej na zamówienie.
Fotografie nie są załącznikami biblioteki mediów
To pliki prywatne z własnym terminem przechowywania. Fotografia klienta nie jest zdjęciem produktu i nie jest tak traktowana.

Wymagania: WordPress 6.0 lub nowszy, PHP 8.1 lub nowszy oraz WooCommerce. Bez WooCommerce wtyczka zatrzymuje się sama i o tym informuje — nie ma własnego łańcucha zamówień, na którym mogłaby się oprzeć.

Ustawienia i jedyne ograniczenie, które zostaje

Wszystko, co sklep zwykle zmienia, mieszka w Atölye → Ayarlar: jak nazywa się każdy pakiet, ile kosztuje dla jednej do sześciu osób, ceny dwóch dodatków, który pakiet dostaje zestaw farb gratis, który jest zaznaczony przy otwarciu strony i jak długo przechowywane są fotografie.

Ceny wpisujesz w lirach, a wtyczka zapisuje je jako całkowite jednostki podrzędne. Zapis jest wszystko albo nic: jeśli jednego pola nie da się odczytać, nie zapisuje się żadnego, a ekran mówi którego. Pół tabeli cen to tabela, która pęka dokładnie wtedy, gdy klient składa zamówienie.

Zmiana nazwy pakietu
Nazwy dostarczane z wtyczką opisują figurki drukowane w 3D, bo taki był sklep, dla którego ją zbudowano. Wpisz własne — „Mały wisiorek”, „Grawerowana tabliczka”, „Wydruk A4” — i to zobaczy klient. Wewnętrzny klucz obok każdego pola nigdy się nie zmienia, więc istniejące zamówienia wciąż wskazują właściwą rzecz.
Sprzedawać mniej niż pięć
Zostaw nazwę pakietu pustą, a zniknie z formularza zamówienia, a serwer odrzuci go, jeśli ktoś mimo to go wyśle. Jego ceny zostają w tabeli, więc włączenie go z powrotem to jedno słowo, a nie ponowne wpisywanie.
Który pakiet otwiera się zaznaczony
To decyzja handlowa, a nie techniczna: średni próg kotwiczy klienta w górę, najtańszy w dół. Jeśli wybrany przez ciebie zostanie później wyłączony, formularz cofa się do pierwszego wciąż włączonego pakietu, zamiast otwierać się zupełnie bez ceny.

OGRANICZENIE, KTÓRE ZOSTAJE: miejsc na pakiety jest pięć. Możesz je przemianować, wycenić i wyłączyć, ale nie możesz dodać szóstego. Jeśli twoja linia potrzebuje więcej — napisz do nas i powiedz ile: to następna rzecz w budowie, a znajomość prawdziwej liczby nadaje jej kształt.

Instalacja

  1. Najpierw zainstaluj i włącz WooCommerce. Bez niego MevvAtelier odmawia uruchomienia.
  2. Zainstaluj MevvAtelier: wgraj plik zip przez Wtyczki → Dodaj nową albo skopiuj katalog mevvatelier do /wp-content/plugins/.
  3. Włącz ją. Przy włączeniu wtyczka rejestruje swoje statusy zamówień, tworzy katalog skarbca zdjęć i planuje codzienne zadanie przechowywania.
  4. Utwórz stronę i umieść na niej shortcode [mevvatelier]. Ta strona jest twoim formularzem zamówienia.
  5. Złóż zamówienie testowe przez tę stronę, potem otwórz Atölye w menu administratora i przeprowadź je raz od początku do końca. Zrób to, zanim zaczniesz reklamować stronę: cała pętla zajmuje pięć minut i jest jedynym sposobem, by zobaczyć e-maile, które twój sklep naprawdę wysyła.

Odnośniki akceptacji są podpisywane sekretem generowanym przy pierwszym użyciu i przechowywanym w twojej własnej bazie danych. Nigdy nie opuszcza twojego serwera i nie jest wyprowadzany z niczego, co posiadamy my.

Trzy shortcode’y

[mevvatelier]
Formularz zamówienia. Pięć kroków: pakiet, ile osób jest w scenie, fotografie, dane klienta i pole zgody. Gdy klient wybiera, pokazuje bieżącą sumę — i ta suma nigdy nie jest tym, czym zapisuje się zamówienie; zobacz „Gdzie leżą ceny”.
[mevvatelier_tanitim]
Pas promocyjny na stronę główną: nagłówek, krótki tekst i przycisk do formularza zamówienia. Przyjmuje identyfikator załącznika: [mevvatelier_tanitim gorsel="123"].
[mevvatelier_gorsel]
Obraz z twojej biblioteki mediów wyświetlony w responsywnych rozmiarach, które WordPress i tak już wygenerował: [mevvatelier_gorsel id="123" size="large"]. Istnieje po to, by strona promocyjna nie wrzucała fotografii o szerokości 2000 pikseli w 380-pikselowe miejsce na telefonie.

Strona zamówienia wyłącza dla siebie buforowanie stron — w języku, który jednakowo rozumieją LiteSpeed, WP Rocket i W3 Total Cache — a do tego wysyła nagłówki no-store. Zbuforowany formularz zamówienia wysyła przeterminowany token i cicho zawodzi, co dla klienta wygląda jak formularz, który nic nie robi.

Gdzie leżą ceny

Cena zamówienia liczona jest na twoim serwerze wyłącznie z wyboru klienta. Suma przysłana przez przeglądarkę jest po prostu ignorowana: pytanie przeglądarki, ile policzyć, to najkrótsza droga do tego, by ktoś kupił u ciebie za darmo. Pieniądze trzymane są jako całkowite jednostki podrzędne (kurusze, grosze), nigdy jako liczba dziesiętna, więc długie zamówienie nie może rozjechać się o jedną jednostkę między fakturą a zamówieniem.

Edytujesz je w Atölye → Ayarlar, w lirach, z przecinkiem dla kuruszy. Każdy pakiet potrzebuje ceny dla każdej obsługiwanej liczby osób, od jednej do sześciu. Cała tabela jest sprawdzana, zanim cokolwiek zostanie zapisane, a jeśli jednego pola nie da się odczytać, ekran mówi którego i nie zapisuje żadnego — pół tabeli cen to tabela, która pęka dokładnie wtedy, gdy klient składa zamówienie.

Całość mieści się w jednej opcji, mevvatelier_pricing, jeśli wolisz wdrażać to przez WP-CLI niż klikać. Wtyczka odczytuje opcję z powrotem po zapisie i odmawia zgłoszenia sukcesu, jeśli odczyt się nie zgadza — sklepowi za trwałą pamięcią podręczną obiektów można inaczej powiedzieć „zapisano”, podczas gdy dalej sprzedaje po starej cenie.

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

Wewnętrzne klucze pakietów to anahtarlik, orta, buyuk, anahtarlik_orta i uclu_set; klucze dodatków to paint_kit i rush. To do nich odwołuje się kod i twoje istniejące zamówienia, więc nigdy się nie zmieniają — nazwa, którą widzi klient, to osobne pole, które możesz przepisać, kiedy chcesz.

Kolejka pracowni

Atölye pojawia się w menu administratora u każdego, kto może edytować zamówienia sklepu. Wypisuje otwarte zamówienia od najstarszego i zaznacza na czerwono te, które przekroczyły obiecany termin: zwykle dwadzieścia cztery godziny, sześć przy zamówieniu ekspresowym. Pytanie, na które odpowiada, brzmi nie „co jest otwarte”, lecz „co jest spóźnione” — i tylko takie warto umieszczać na ekranie.

Operator wgrywa podgląd z tego samego wiersza. Wgranie odkłada plik w skarbcu, zapisuje sumę kontrolną dokładnie tego, co zostało pokazane, przenosi zamówienie do Müşteri onayında i wysyła e-mail do klienta — jedna czynność, a nie cztery rzeczy do zapamiętania.

Model bekliyor
wc-mevv-model. Fotografie są, model jest budowany. Odnośnik klienta działa i mówi mu dokładnie to.
Müşteri onayında
wc-mevv-onay. Podgląd został wysłany. Klient może go zatwierdzić albo poprosić o poprawkę — tyle razy, ile trzeba.
Baskıda
wc-mevv-baski. Zatwierdzone i w produkcji. Formularz poprawek zniknął z ekranu, a na tym etapie serwer również odrzuca żądanie poprawki, nie tylko ekran.

To, który stan może następować po którym, zapisano jako listę przejść dozwolonych, a nie zabronionych. Krok, o którym nikt nie pomyślał, jest domyślnie odrzucany, zamiast po cichu dozwolony — i na tym polega różnica między automatem stanów a sugestią.

Co widzi klient

Jeden odnośnik, wysłany e-mailem, działający sześćdziesiąt dni i niewymagający konta. Prosić kogoś o rejestrację, zanim zobaczy własny podgląd, to najpewniejszy sposób na utratę akceptacji — dlatego odnośnik niesie własne uprawnienie: jest podpisany, wskazuje jedno zamówienie i żadne inne, a zmanipulowany nie otwiera niczego.

Strona pokazuje inny ekran dla każdego stanu i nigdy nie trafia do pamięci podręcznej: zbuforowana strona akceptacji pokazałaby podgląd jednego klienta następnemu odwiedzającemu. Odnośnik akceptacji pojawia się w każdym e-mailu dwa razy — jako przycisk i jako zwykły tekst — bo niektóre programy pocztowe przycisku nie rysują.

  • Zamówienie przyjęte — wysyłane przy złożeniu zamówienia, wraz z odnośnikiem.
  • Podgląd gotowy — wysyłane, gdy operator go wgra. To ten e-mail prosi o decyzję.
  • Akceptacja zapisana — wysyłane przy zatwierdzeniu i mówi wprost, że produkcja ruszyła.
  • Wysłano — wysyłane, gdy operator oznaczy zamówienie jako gotowe.

E-maile przechodzą przez własny szablon WooCommerce twojego sklepu, więc wyglądają jak reszta twojej poczty, a nie jak coś doczepionego.

Fotografie

Wgrane pliki trafiają do katalogu wewnątrz twojego folderu uploads, którego nazwy nie da się odgadnąć, i są chronione jednocześnie na cztery sposoby: regułą .htaccess, plikiem web.config dla IIS, plikiem index.php oraz uprawnieniami, które pozwalają czytać je tylko witrynie. Cztery, bo każdy z nich z osobna na czyimś serwerze nie istnieje albo jest ignorowany.

Plik jest przyjmowany za to, czym są jego bajty, a nie za to, co twierdzi jego nazwa. Plik wykonywalny przemianowany na .jpg zostaje odrzucony w drzwiach: sprawdzanie rozszerzenia to sprawdzanie dokumentów dostarczonych przez samego napastnika. Przyjmowane typy to JPEG, PNG, WebP i HEIC. Zapisywana nazwa jest losowa; oryginalna nazwa pliku klienta nigdy nie trafia do systemu plików, bo „ayse-dogum-gunu.jpg” to imię dziecka i data.

Każda fotografia i każdy podgląd wydawane są przez jedną bramę. Twój zespół wpuszcza uprawnienie do zamówień WooCommerce, klienta — podpisany odnośnik sprawdzony wobec tego zamówienia. Odnośnik zbudowany dla jednego zamówienia nie otworzy pliku innego. Pliki nigdy nie dostają publicznego adresu URL.

Okres przechowywania
Codzienne zadanie usuwa wgrane pliki i podglądy zakończonych zamówień po okresie, który ustawiasz ty: domyślnie sześćdziesiąt dni, przechowywane w opcji mevvatelier_retention_days. Zamówienie, jego kwota i zapis akceptacji zostają; fotografia nie.
Co opuszcza serwer
Z tej wtyczki nic. Z łańcucha zamówień nie dociera do nas żadna fotografia, żaden podgląd, żadne zamówienie, żadna telemetria ani żadne zapytanie licencyjne. Skarbiec to katalog na twoim dysku, a dziennik akceptacji to metadane twoich własnych zamówień.

Trzymanie zdjęcia dziecka na serwerze sklepu bezterminowo to odpowiedzialność, a nie funkcja. Jeśli twoja obietnica przechowywania złożona klientom różni się od sześćdziesięciu dni, zmień opcję tak, by odpowiadała temu, co im powiedziałeś: liczba na twojej stronie i liczba we wtyczce powinny być tą samą liczbą.

Akceptacja, anulowanie i prawo odstąpienia

Zgodnie z tureckim rozporządzeniem o sprzedaży na odległość towar przygotowany według własnej specyfikacji konsumenta po wykonaniu nie daje prawa odstąpienia (Mesafeli Sözleşmeler Yönetmeliği, art. 15/1-b). MevvAtelier jest wokół tego zbudowany: klient dowiaduje się o tym na ekranie akceptacji, a chwila jego zgody jest zapisywana w zamówieniu razem z akceptacją.

Przed akceptacją nic nie zostało wyprodukowane, więc anulowanie kosztuje cię jeden model i zero materiału — anuluj zamówienie w WooCommerce i zwróć pieniądze jak przy każdym innym. Po akceptacji formularz poprawek znika, a serwer odrzuca żądanie poprawki, bo w tym momencie materiał jest już zaangażowany.

To opis tego, co zapisuje wtyczka, a nie porada prawna. Twoja własna umowa sprzedaży na odległość i formularz informacji wstępnej nadal muszą mówić to samo, a wtyczką do tej części jest MevvLegal.

Rozwiązywanie problemów

Formularz zamówienia zostaje wysłany i nic się nie dzieje
Prawie zawsze zbuforowana kopia strony. Formularz niesie token jednorazowy, a zbuforowana strona rozdaje przeterminowany, który jest cicho odrzucany. Wyczyść tę stronę z pamięci podręcznej i sprawdź, czy nagłówki no-store wtyczki docierają do przeglądarki; niektóre CDN-y usuwają je na brzegu sieci.
Klient mówi, że odnośnik nie działa
Trzy przyczyny, a strona mówi, która to. Po sześćdziesięciu dniach wygasł — wyślij nowy. Jeśli został przepisany z e-maila ręcznie, zwykle brakuje jednego znaku. Jeśli wskazuje inne zamówienie, został przesłany dalej z innej wiadomości.
W panelu fotografie pokazują się jako uszkodzone obrazy
Skarbiec jest wydawany zamiast strzeżony: sprawdź, czy katalog skarbca nadal zawiera swój .htaccess i index.php oraz czy hosting nie zresetował uprawnień. Jeśli pliki są osiągalne przez URL, to pilniejsza połowa problemu.
Wgranie zostaje odrzucone, choć to fotografia
Plik jest odczytywany jako coś innego niż JPEG, PNG, WebP czy HEIC. Zrzuty ekranu z telefonu i obrazy eksportowane przez narzędzia projektowe często nimi nie są; ponowny zapis jako JPEG rozwiązuje sprawę. Sprawdzane nie jest rozszerzenie.
Zamówienia nie wychodzą ze stanu „Model bekliyor”
Nic nie rusza ich samo — podgląd wgrywa operator. Jeśli u kogoś z twojego zespołu ekran kolejki jest pusty, sprawdź, czy ma uprawnienie do edycji zamówień sklepu; ekran otwiera się na tym, a nie na byciu administratorem.
Stare fotografie wciąż leżą na dysku
Zadanie przechowywania działa na WP-Cron, który odpala się tylko wtedy, gdy ktoś odwiedzi witrynę. W spokojnym sklepie czeka na ruch — albo skieruj na nie prawdziwego crona serwerowego. Sprawdź też, czy te zamówienia rzeczywiście są zakończone; zamówień otwartych nigdy się nie czyści.
Ceny w formularzu nie są tymi, które ustawiłem
Twoja zapisana tabela nie przeszła walidacji i wtyczka wróciła do wartości domyślnych, zamiast sprzedawać po złej cenie. Jest o tym powiadomienie dla administratora. Każdy pakiet potrzebuje wszystkich liczb osób od jednej do sześciu, a każda kwota musi być nieujemną liczbą całkowitą w jednostkach podrzędnych.

Pisząc do nas, prześlij wersje WordPressa, WooCommerce, PHP i wtyczki, numer zamówienia oraz informację, który z czterech e-maili dotarł, a który nie. Nie przysyłaj fotografii klienta.