↳ Zápisky

Od pluginu jen pro mě k veřejnému nástroji: našeptávač adres z Mapy.com

Napsal jsem si kdysi malý plugin, který na pokladně e-shopu našeptává adresy z Mapy.com – vyberete ulici a rovnou se doplní město, PSČ i země. Fungoval dobře, ale byl to plugin „jen pro mě“: nastavený natvrdo v kódu a ušitý na konkrétní klientské weby. Teď jsem z něj s pomocí Claude Code udělal univerzální plugin, který si kdokoli nainstaluje a nakliká v administraci.

Tady je, jak to vzniklo – a rovnou i návod, jak si zařídit klíč k Mapy.com. Spoiler: bez kreditky.

Jak to začalo – pokladna

Prvotní verze řešila jednu věc: našeptávání adresy na WooCommerce pokladně. Zákazník začne psát ulici, vybere z nabídky Mapy.com a formulář se sám doplní – ulice, město, PSČ, země. Míň překlepů a hlavně jasně a správně strukturované adresy – to ocení každé napojení na API externích dopravců, které v různých projektech řeším.

Pak přišel Contact Form 7

Pro jednoho klienta přibyl požadavek: stejný našeptávač i do kontaktního formuláře (Contact Form 7), ne jen do pokladny. Přidal jsem tedy adaptér pro CF7. Jenže mapování polí – které pole je ulice, které město, PSČ, země – bylo zase napevno svázané s konkrétním formulářem na daném webu.

Háček: byl to plugin jen pro mě

Fungovalo to, ale mělo to jednu vadu. Všechno podstatné – API klíč, kde se má našeptávat, názvy polí ve formuláři – bylo zadrátované v kódu. Každý nový web se musel nastavit přesně podle kódu, případně kód poupravit.

Rozhodl jsem se to změnit (s Claude Code)

Řekl jsem si, že z toho udělám plugin, který dám ven – veřejný, univerzální a celý konfigurovatelný z administrace. S Claude Code jsem:

  • vytáhl veškeré nastavení z kódu do jedné stránky v administraci,
  • přidal přepínače, kde se má našeptávat (WooCommerce / Contact Form 7),
  • udělal volbu zemí, ze kterých se adresy nabízejí,
  • a hlavně nastavitelné mapování polí pro CF7 – globálně i pro konkrétní formulář zvlášť.

Přibyla i automatická aktualizace z GitHub Releases. Podstatné ale je, že plugin je teď použitelný i pro lidi, co do kódu sahat nechtějí.

Proč Mapy.com a ne Google

Našeptávač jede na suggest API Mapy.com. Vůči Google Places má pro tenhle účel jednu velkou výhodu hned na začátku: registrace do developer.mapy.com po vás nechce platební kartu. U Google Cloudu bez založeného fakturačního účtu s kartou API vůbec nerozjedete; u Mapy.com se prostě zaregistrujete a máte klíč.

A bezplatný tarif je štědrý. Na základním (free) tarifu dostanete 250 000 kreditů měsíčně a placená spotřeba je ve výchozím stavu zakázaná – takže se vám nemůže stát, že přijde nečekaná faktura. Když kredity dojdou, API prostě přestane odpovídat, dokud se limit další měsíc neobnoví. Na běžné našeptávání na jednom e-shopu je čtvrt milionu kreditů řádově víc, než spotřebujete.

Finanční program projektu na developer.mapy.com: tarif Základní, 250 000 volných kreditů na měsíc, placená spotřeba zakázána
Bezplatný tarif: 250 000 volných kreditů měsíčně a „Placená spotřeba je zakázána“ – bez rizika nečekané faktury.

Pozn.: Ceník a výše kreditů se pochopitelně můžou v čase měnit – hodnoty výše jsou stav v době psaní článku. Aktuální podmínky vždy najdete ve svém účtu.

Návod: jak si zařídit klíč na developer.mapy.com

Krok za krokem:

1. Registrace a projekt. Přihlaste se na developer.mapy.com (účtem Seznam) a v sekci Projekty založte nový projekt (tlačítko „Vytvořit nový projekt“). V přehledu projektu pak vidíte, že je volání API povolené, a průběžnou spotřebu kreditů.

Přehled projektu na developer.mapy.com: Volání API je povoleno, aktuální spotřeba kreditů za měsíc
Přehled projektu – stav klíče a spotřeba kreditů za měsíc.

2. API klíč. V projektu máte v sekci „API klíče“ rovnou výchozí klíč. Ten si zkopírujte.

3. Omezte klíč – tohle nepřeskakujte. Klíč se používá přímo v prohlížeči, takže je vidět ve zdrojáku stránky. Tak to Mapy.com mají navržené a je to v pořádku, ale znamená to, že by ho někdo mohl opsat a použít na cizím webu (a vyčerpat vám kredit). Proto ho v Nastavení klíče → Omezení API klíče omezte. Na výběr jsou tři typy:

Omezení API klíče na developer.mapy.com: výběr typu Referery, IP adresy, User agenti a pole pro hodnotu
Omezení klíče lze nastavit podle refereru (domény), IP adresy nebo user agenta.
  • Referery (HTTP referer) – typicky doména vašeho webu. Pro našeptávač běžící v prohlížeči je to nejběžnější a nejrozumnější volba.
  • IP adresy – hodí se spíš pro serverová volání, kde referer chybí.
  • User agenti – doplňkově.

Pro web na jedné doméně tedy nejspíš sáhnete po omezení podle refereru na doménu webu.

4. Vložte klíč do pluginu. Ve WordPressu jděte do Nastavení → LH Seznam.cz autocomplete a klíč vložte do pole „API klíč Mapy.cz“.

Nastavení pluginu

Celé nastavení je na jediné stránce v Nastavení → LH Seznam.cz autocomplete:

Stránka nastavení pluginu LH Seznam.cz autocomplete ve WordPress administraci
Jedna stránka v administraci – žádné zásahy do kódu.
  • API klíč Mapy.cz – bez něj se plugin nikde nenačte.
  • Kde našeptávat – přepínače pro WooCommerce (klasická i bloková pokladna) a pro Contact Form 7. Skripty pluginu se načtou jen tam, kde je našeptávač zapnutý.
  • Země pro našeptávání – Česko, Slovensko, Polsko, Německo, Rakousko, Maďarsko. Výchozí je Česko a Slovensko; když nezaškrtnete žádnou zemi, hledá se ve všech podporovaných.
  • Výchozí pole pro CF7 – názvy (name) polí z CF7 tagů: ulice, město, PSČ, země. Pole „ulice“ je povinné, protože spouští našeptávání; ostatní jsou volitelná. U konkrétního formuláře jde mapování přepsat přímo v jeho editoru na záložce „Mapy.cz našeptávač“.

Nastavení přímo u formuláře (Contact Form 7)

Globální mapování polí stačí, dokud mají formuláře stejné názvy polí. Když ne, jde ho přepsat u konkrétního formuláře. V editoru CF7 přibude záložka „Mapy.cz našeptávač“ a na ní nastavíte jen pro tenhle jeden formulář:

Záložka Mapy.cz našeptávač v editoru formuláře Contact Form 7 s výběrem polí ulice, město, PSČ a země
Záložka „Mapy.cz našeptávač“ v editoru konkrétního CF7 formuláře – přepíše globální nastavení.
  • Našeptávač – zapnout nebo vypnout jen pro tento formulář, nebo zdědit z globálního nastavení pluginu.
  • Ulice, Město, PSČ, Země – u každého pole buď vyberete konkrétní pole formuláře, necháte Globální default, nebo dáte — nepoužívat —.

Nabídka rovnou obsahuje pole, která formulář opravdu má (podle jeho tagů), takže se v názvu nepřeklepnete. Ulice je i tady povinná – spouští našeptávání.

Kde to najít

Plugin je na GitHubu: github.com/luboshilgert/lh-seznamcz-autocomplete. Není na wordpress.org, ale sám se aktualizuje z GitHub Releases (přes Plugin Update Checker), takže se update nabídne standardně v administraci.


Z pluginu ušitého jednomu klientovi je teď nástroj, který si nasadí kdokoli – a to hlavní kouzlo bylo přesunout konfiguraci z kódu do administrace. Když k tomu přičtu, že Mapy.com nechtějí kreditku a dávají štědrý free tier, je to pro české a slovenské weby docela příjemná alternativa Google Places, který bez kreditky nerozjedete.

↳ Poznámku napsal

Potřebujete upravit web?

Nejsem fanoušek desítek pluginů, které web zpomalí. Co jde, vyřeším čistým kódem - bez zbytečné zátěže navíc.

Probrat úpravu webu