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
- Najpierw zainstaluj i włącz WooCommerce. Bez niego MevvAtelier odmawia uruchomienia.
- Zainstaluj MevvAtelier: wgraj plik zip przez Wtyczki → Dodaj nową albo skopiuj katalog
mevvatelierdo/wp-content/plugins/. - Włącz ją. Przy włączeniu wtyczka rejestruje swoje statusy zamówień, tworzy katalog skarbca zdjęć i planuje codzienne zadanie przechowywania.
- Utwórz stronę i umieść na niej shortcode
[mevvatelier]. Ta strona jest twoim formularzem zamówienia. - 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
.htaccessiindex.phporaz 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.