↳ Zápisky

Jedno kliknutí na „Přeskočit“ a e-shop byl zavřený

Nedávno jsem zjistil, že se na e-shopu, který spravuju, nenačítá produktová stránka. Místo fotky, ceny a tlačítka do košíku tam byl velký nadpis „Velké věci jsou na obzoru“ a pod ním věta, že obchod brzy spustíme.

Jenže ten obchod už několik týdnů normálně prodával.

Stránka obchodu pro nepřihlášeného návštěvníka: místo produktu nadpis Velké věci jsou na obzoru
Takhle obchod viděl nepřihlášený návštěvník. Screenshoty v článku jsou ze simulace na testovacím webu.

Úvodní stránka přitom fungovala, články taky. Zavřené byly jen produkty, košík a pokladna, tedy přesně ta část webu, která vydělává.

Co to vlastně je

Novější WooCommerce má režim „Brzy k dispozici“ (anglicky Coming soon). Je určený pro obchody, které se teprve chystají: web už běží, ale zákazník místo zboží vidí upoutávku. Jedna jeho varianta schová jen stránky obchodu a zbytek webu nechá viditelný. Přesně ta se zapnula tady.

Nikdo ho nezapnul úmyslně. A nikdo si toho hned nevšiml.

Proč to nikdo neviděl

Protože ten režim platí jen pro nepřihlášené návštěvníky. Kdo je přihlášený v administraci, vidí obchod úplně normálně, s cenou i košíkem. Jediná stopa je malý štítek „Již brzy pro Obchod“ v horní liště a nenápadný pruh dole na stránce.

Produktová stránka pro přihlášeného správce: cena a košík fungují, v liště štítek Již brzy pro Obchod a dole upozornění na režim Brzy k dispozici
Stejná stránka pro přihlášeného správce: cena i košík na místě. Prozradí to jen štítek nahoře a pruh dole.

Majitel e-shopu nebo správce, který si web otevře ve stejném prohlížeči, ve kterém pracuje v administraci, tak vidí všechno v pořádku. Zákazníci ne.

Jak se to stalo

Odpověď byla v přístupovém logu serveru, tedy v záznamu všech požadavků, které na web přišly. Celý příběh se v něm odehrál během necelé minuty:

  1. Někdo se přihlásil do administrace.
  2. Klikl v menu na WooCommerce → Domů.
  3. WooCommerce usoudil, že obchod ještě neprošel úvodním průvodcem nastavení, a místo nástěnky ho do průvodce přesměroval.
  4. V průvodci zvolil „Přeskočit řízené nastavení“ a potvrdil zemi.
  5. O tři vteřiny později WooCommerce sám zapnul režim „Brzy k dispozici“.
Úvodní obrazovka průvodce nastavením WooCommerce s tlačítkem Založit můj obchod a odkazem Přeskočit řízené nastavení
Průvodce, který se objeví místo nástěnky WooCommerce. Odkaz Přeskočit řízené nastavení vypadá jako bezpečná zkratka.
Krok průvodce Kde se vaše firma nachází? s vybranou Českou republikou a tlačítkem Přejít do mého obchodu
Ještě potvrdit zemi – a obchod je zavřený.

Mezi otevřením průvodce a zavřením obchodu uběhlo sedmnáct vteřin. Nikdo nenavštívil nastavení viditelnosti, nikdo nic nepřepínal. Člověk chtěl jen přeskočit otravného průvodce a jít dál po své práci.

Proč tam vůbec průvodce byl? Web jsem stavěl na svém počítači a na server ho přenesl hotový. Průvodce na něm nikdy nikdo nedokončil, a tak WooCommerce považoval obchod za nový. A nový obchod podle něj patří za stránku „Brzy spustíme“, dokud ho někdo výslovně nespustí. Že už má za sebou objednávky, nekontroluje.

Stránka WooCommerce Domů po průvodci: seznam kroků ke spuštění obchodu a v horní liště štítek Již brzy pro Obchod
Po průvodci WooCommerce nabízí kroky ke spuštění obchodu. V horní liště už svítí štítek Již brzy pro Obchod.

A k tomu ještě ceny

Průvodce udělal ještě jednu věc, které si nikdo nevšiml. Při potvrzení země přepsal formát cen podle výchozích hodnot pro Česko. Obchod měl ceny bez haléřů a po průvodci u všech najednou svítilo „,00″.

Takže pokud do průvodce omylem vlezete i vy, zkontrolujte si potom i WooCommerce → Nastavení → Obecné.

Jak to opravit hned

Ve WooCommerce otevřete Nastavení → Viditelnost webu, přepněte na Živě a uložte. Pokud máte na webu cache (W3 Total Cache, WP Rocket a podobně), vyprázdněte ji, jinak budou návštěvníci ještě chvíli dostávat uložené stránky se zavřeným obchodem.

WooCommerce Nastavení, záložka Viditelnost webu: zvolené Již brzy se zapnutou volbou Použít jen pro stránky obchodu, pod tím možnost Živě
Viditelnost webu po průvodci: zapnuté Již brzy jen pro stránky obchodu. Správně má být zvolené Živě.

Jak to zamknout natrvalo

Na obchodě, který už prodává, nemá tenhle režim co dělat. Nechtěl jsem tedy spoléhat na to, že nikdo nikdy neklikne vedle. Do webu jsem přidal malý mu-plugin (plugin, který WordPress načítá vždycky a nedá se v administraci vypnout) s jediným řádkem:

<?php
add_filter('pre_option_woocommerce_coming_soon', static fn() => 'no');

WordPress se tím při každém dotazu na tohle nastavení dozví „vypnuto“, ať je v databázi uloženo cokoli. Přepínač ve Viditelnosti webu pak zůstane vidět, ale nic neudělá. Obchod zůstane otevřený, i kdyby někdo průvodce prošel znovu.

Produktová stránka pro nepřihlášeného návštěvníka s cenou a tlačítkem Přidat do košíku
S mu-pluginem vidí nepřihlášený návštěvník produkt normálně, i když je v databázi uložené Již brzy.

Jedna past pro vývojáře: s tímhle filtrem už nastavení přes WordPress nepřepnete zpátky na „vypnuto“. WordPress před uložením porovná novou hodnotu se starou, a protože filtr i starou hodnotu hlásí jako no, usoudí, že není co ukládat. V databázi tak může dál ležet zapnutý režim z průvodce. Dokud mu-plugin běží, nevadí to. Než ho ale jednou smažete, opravte hodnotu woocommerce_coming_soon v databázi na no ručně, jinak se obchod znovu zavře.

Co si z toho odnést

Když se vám zdá, že web nefunguje, promažte cache a podívejte se na něj jako zákazník. Tedy v anonymním okně prohlížeče, nepřihlášení. Přihlášený správce vidí jiný web než návštěvníci.

Nechcete se trápit s technickou správou e-shopu a chcete mít po ruce někoho, kdo rychle zasáhne, když se něco pokazí? E-shop můžete svěřit do správy mně.

↳ Poznámku napsal

Potřebujete to na svém e-shopu?

Tyhle úpravy dělám na e-shopech klientů - od drobností v pokladně po platební brány na míru. Orientační ceny mám sepsané, ať víte, do čeho jdete.

Ceník úprav →