Jak vytvořit vlastní WordPress šablonu na míru

Jak jsem si vytvořil vlastní WordPress šablonu

Okolnosti mě přiměly, abych si poprvé v životě splichtil WordPress šablonu na míru. Pokud také zvažuješ, že si nějakou vytvoříš, možná ti pomohou mé zkušenosti.

Kdy se ti vyplatí nakódovat si WordPress šablonu na míru

Existují tisíce šablon zdarma na WordPress.org. Další fůru placených nalezneš v e-shopech jako Themeforest. Tak proč si teda někdo spoustu hodin patlá vlastní?

Pravděpodobně se ti to vyplatí, pokud:

  • Víš velmi přesně, jak má výsledný design vypadat. Některý z tvých požadavků je dost specifický.
  • Tvé znalosti kódování jsou na takové úrovni, že ti to nezabere víc času, než upravit si nějakou existující šablonu.

Navíc pokud jsi vybíravý/á jako já, tak samotné hledání vhodného designu ti může zabrat pěknou řádku hodin.

Já si původně postavil tento blog na Divi Extra. Divi je nejprodávanější šablona na světě. Obsahuje nástroj, s nímž se velmi rychle dají vytvořit dost pokročilé designy. Pro tvůrce webů boží věc. A pro ty, co neumí pracovat s kódem, ještě božejší 🙂

Jenže… to si takhle 3 týdny po večerech upravuješ šablonu. Napíšeš si k tomu i pár mini-pluginů. Když to vypadá poměrně k světu a přidáš několik článků, zjistíš, že stránkování je totálně nepoužitelné.

Ono totiž funguje přes Ajax. Jsi-li na úvodní stránce a klikneš na stránku 2, objeví se ti sice články z druhé stránky, ale nezmění se URL. Nacházíš se pořád na homepage. Proč je to špatně?

  • Vyhledávače se dostanou jen na příspěvky z úvodní stránky a na ty, na které z nich vedou odkazy. S trochou „štěstí“ po čase na některé nepovede žádný dohledatelný interní link. V každém případě to znamená výrazně nižší PageRank pro starší obsah. Podtrženo, sečteno – jedna velká SEO tragédie, díky níž by blog pravidelně přicházel o nemalé procento návštěvníků z vyhledávačů.
  • Pokud uživatel klikne na druhou stránku, přejde na nějaký článek a následně stiskne tlačítko Zpět, dostane se opět na homepage. Zde se mu zobrazí nejnovější příspěvky, ne ty, jež viděl na druhé stránce.

Pročítal jsem si historii verzí šablony a uvědomil si důležitou věc. To stránkování kdysi fungovalo normálně. Pak někdo dostal geniální nápad a s následující aktualizací ho totálně dojebal. To samé se může stát s jakoukoliv šablonou.

Samozřejmě pokud by k tomu došlo, lze to vyřešit přechodem na jinou. Nicméně z hlediska time managementu preferuju vše udělat jednou a pořádně. Aby to fungovalo pokud možno napořád. Čím víc věcí má šanci se v budoucnu pokazit, tím větší riziko, že se jich sepsí několik najednou. A dle Murphyho zákonů zajisté v době, kdy člověk potřebuje pracovat na něčem úplně jiném.

A tak jsem se po zralé úvaze rozhodl naučit nakódovat WordPress šablonu sám.

Co k tomu potřebuješ umět

Pro vytvoření designu se neobejdeš bez slušné znalosti HTML a základů CSS. Neuškodí umět pracovat s Javascriptem.

Budeš také potřebovat alespoň pasivně chápat, jak funguje PHP. Pro to, aby se články zobrazovaly, jak mají, či čtenáři mohli přidávat komentáře, ti postačí zkopírovat kousky PHP kódu na správná místa.

Pokud se rozhodneš přidat nějakou vlastní funkcionalitu, pak samozřejmě budeš potřebovat znát PHP aktivně. Také ti chvilku potrvá zorientovat se ve speciálních funkcích implementovaných přímo ve WordPressu.

Kolik času ti to zabere

Celkově jsem byl mile překvapen. Se slušnou znalostí HTML, CSS, Javascriptu, PHP a skromnými zkušenostmi s vývojem WordPress pluginů jsem se do toho dostal dost rychle.

Zatímco Divi Extra šablonu jsem si upravoval 3 týdny, svou vlastní jsem si naprogramoval za 7 dnů. A výsledek je na 100% takový, jaký jsem chtěl. Takže jsem nakonec kvitoval s potěšením, že mě okolnosti dokopaly k akci.

Další 2 týdny mi trvalo vytvoření všech pluginů, které jsem potřeboval (s výjimkou cache pluginu – ten jsem si sice naprogramoval také, ale jeden existující měl v testech rychlosti lepší výsledky). Díky tomu mám jejich chování víc pod kontrolou a téměř nemusím řešit aktualizace (a jestli se při nich něco nepokazilo).

Jak jsem vytvářel design šablony

Prvně jsem se poohlížel po nějaké vzorové šabloně. Chtěl jsem vidět praktický příklad, jak zorganizovat veškerý kód. K tomu mi skvěle posloužila startovací šablona underscores.

Také mi pomohlo prohlédnout si zdrojový kód defaultní WordPressové šablony. Ta je velmi jednoduchá a na rozdíl od těch vymakanějších obsahuje jen základní funkce – tj. přesně to, co v začátcích člověk potřebuje.

Díky těmto příkladům jsem získal přehled o PHP kódu a mohl se pustit do tvorby designu.

Nezbytné soubory

Možná tě překvapí, že pro vytvoření šablony jsou bezpodmínečně nutné jen 2 soubory:

  • index.php (pro HTML a PHP kód)
  • style.css (pro CSS styly)

Vyplatí se ti však vytvořit i následující soubory (kód tak bude přehlednější):

  • single.php (design článků)
  • page.php (design stránek)
  • header.php (horní část společná pro všechny stránky)
  • footer.php (spodní část společná pro všechny stránky)
  • sidebar.php (postranní sloupec společný pro všechny stránky)
  • comments.php (soubor, v němž se řeší komentáře)
  • 404.php (stránka nenalezena)

Bootstrap

Vzhled blogu jsem se rozhodl postavit na Bootstrapu. Co mě k tomu vedlo?

S minimálním množstvím kódu s ním vytvoříš responzivní design. Jinými slovy – zařídíš, že se bude zobrazovat jinak na počítačích, tabletech a mobilech. Vždy tak, aby blog na daném zařízení vypadal co nejlépe.

Pokud jsi na PC, stačí ti zmenšit okno prohlížeče a uvidíš, jak by se změnil vzhled na menších obrazovkách.

Všiml/a sis, že většina blogů používá pravý sidebar? A že jeho obsah se snadno přehlédne? Dle mého názoru na tom mají lví podíl 2 faktory:

  • Bannerová slepota: Tyto postranní sloupce zpravidla obsahují reklamu. Uživatelé se je tak naučí podvědomě ignorovat (podobně jako bannery).
  • F-pattern: Defaultní způsob, jak si návštěvníci prohlížejí obsah stránky, vypadá, jako by pohledem psali písmeno F. Její začátek si projdou kompletně zleva doprava. Poté už zrak nezajíždí až tak moc vpravo. Nakonec scrollují směrem dolů a pouze v levé části stránky „skenují“ text. V praxi samozřejmě existují prvky, které tento vzorec snadno rozbijí. Např. obrázek spolehlivě přitáhne pozornost.

Proto jsem od začátku chtěl mít sidebar vlevo. Blog plánuji monetizovat jen dvěma způsoby – bezplatným kurzem, kde si v každé lekci čtenářům dovolím připomenout, že své weby mohou umístit na servery mé webhostingové firmy a doporučením užitečných služeb pomocí affiliate odkazů. Obtěžujícím reklamám se chci zcela vyhnout. Z tohoto důvodu jsem se zaměřil na to, aby uživatelé můj hlavní prostor pro sebeprezentaci zbytečně nepřehlíželi.

Design úvodní stránky

Jak se můžeš přesvědčit, snažil jsem se o velmi jednoduchý design. Mezi mé priority patřila snadná „skenovatelnost“ a rychlost načítání.

Mnoho šablon dnes zobrazuje seznam článků ve 3 – 4 sloupcích. Uživatelé proto musí při procházení obsahu prohlédnout celou obrazovku zleva doprava. Dle mého názoru tak většinou neučiní a část z nich přehlédnou, což připisuji již zmíněnému F-patternu.

Hledal jsem nějakou studii, která by porovnávala tento populární styl s klasickým. Protože jsem nic nenašel, dal jsem na svou hypotézu a udělal to tak, aby uživatelé mohli přehled článků „proskenovat“ co nejrychleji.

Design článků

Above the fold – tak se nazývá část stránky, která se zobrazí hned po načtení. Tj. obsah viditelný bez scrollování.

S tím souvisí asi největší výtka, kterou mám vůči většině populárních WordPress šablon. Na stránkách s článkem se zobrazí obrovská fotografie, která zabere veškerý prostor above the fold.

Ty ovšem potřebuješ návštěvníky přesvědčit, aby ti neutekli. Hned. Proto jsem zvolil relativně malý obrázek a nadpis zobrazuji ve vrstvě nad ním. Pod ním se nachází přehled nadpisů použitých v článku. Část z nich je viditelná bez scrollování. Díky tomu mají šanci čtenáře okamžitě zaujmout.

Má to i další výhody:

  • Malé rozměry fotografie znamenají nízkou datovou velikost souboru. Stránka se tak načítá rychleji.
  • Spousta blogerů používá obrázky ze stejné fotobanky jako já. Tímto širokoúhlým oříznutím i ty profláklejší vypadají trochu odlišně. Původně jsem měl obavy, jestli ty ořezy nebudou působit divně. Přijde mi však, že z estetického hlediska dělají příjemný dojem.

Velikost písma, šířka a výška řádku

Některé studie uvádějí ideální délku řádku 60 – 80 znaků, jiné hovoří o cca 90. Z vlastní zkušenosti ti mohu potvrdit, že obzvláště u delších článků to znamená mnohem menší zátěž pro oči.

Zvětšením písma na 18 pixelů jsem dosáhl nejen vhodné délky řádku, ale i příjemnějšího čtení pro ty, kteří již nemají perfektní zrak. Jeho výšku (v css line-height) jsem nastavil na 1,5.

Jak jsem si naprogramoval potřebné pluginy

Všiml jsem si, že snad každý plugin má více funkcí, než potřebuji. Často si přidá do zdrojového kódu nějaký ten Javascript nebo CSS. A protože jsem chtěl mít opravdu rychlou šablonu, naprogramoval jsem si je sám.

Pokud si nakóduješ vlastní pluginy:

  • Nemusíš je věčně aktualizovat. Ušetříš čas. Výjimečně i případné potíže s novou verzí.
  • Naprogramuješ si jen to, co fakt potřebuješ. Žádné zbytečné funkce. Díky tomu bude šablona rychlejší.

Jaké pluginy jsem nahradil vlastním kódem?

Contact form 7

Tento plugin jsem nahradil (dle mého vkusu) hezčím kontaktním formulářem vytvořeným pomocí Bootstrapu a vlastního PHP kódu.

Výsledek si můžeš prohlédnout zde.

Advanced noCaptcha reCaptcha

Poslední dobou mně reCaptcha leze čím dál víc na nervy. Vem si, že Google tě sleduje na každém kroku. Většina uživatelů používá jejich prohlížeč (Chrome), většina majitelů smartphonů jejich operační systém (Android) a i když mezi ně nepatříš, na skoro všech webech sledují tvé chování pomocí kódu Google Analytics. Před časem jsem četl zajímavé tvrzení v jedné studii. Údajně se ukázalo, že Google o nás (statisticky vzato) ví víc, než naši blízcí. No a z ničeho nic musíš vyklikávat fotky, na kterých se nachází auto, most, hydrant atd., protože jim v datacentru nastal nějaký zkrat nebo nevím co a najednou ani netuší, jestli jsi člověk či robot.

Tak jsem si naprogramoval vlastní antispam. Ne že by byl nepřekonatelný (sám bych si snadno uměl napsat robota, který by ho obešel …stejně jako bych v takovém případě věděl, jak mu to více zkomplikovat). Ovšem má jednu výhodu – nikdo jiný stejný antispam nepoužívá. Takže se ho těžko někdo bude snažit přelstít. Ono by totiž bylo jednodušší správně vyplnit kontrolní otázku, než ho zkoušet očůrat.

Moderní spamboti umí vyřešit takové ty jednoduché úkoly jako Kolik je 5 + 3. Vytvořil jsem tedy pomocí Bootstrapu modal window. To jsem umístil ve zdrojovém kódu mimo formulář, tj. do míst, kde ho robot těžko bude hledat. Uživatel si kliknutím na tlačítko zobrazí toto okno s antispamovou otázkou. Tučně vidí dotaz a odpověď na něj. Mezi nimi se nachází trocha netučného textu pro zmatení robotů, kteří to nevzdali na předchozím kroku. Navíc správná odpověď, jež vidí uživatel, se nenalézá ve zdrojovém kódu. Tam je pouze prázdný tag <div>, o jehož obsah se postará Javascript a Ajax. Správná odpověď se každý den zvýší o jedničku. Proto skript při kontrole odpovědi akceptuje i hodnotu o 1 nižší pro případ, že by uživatel načetl stránku před půlnocí a odeslal zprávu až další den.

Aplikoval jsem tento antispam i na formulář pro přidávání komentářů. Díky tomu nepotřebuju Akismet či podobný plugin. S jeho používáním mám velmi špatnou zkušenost – hodně nezávadných komentářů označoval jako spam.

Chceš-li to vidět v akci, mrkni do spodní části této stránky nebo na kontaktní formulář.

Table of contents plus

Tento plugin zjistí, jaké nadpisy se vyskytují na stránce. Vytvoří z nich přehlednou tabulku ve formě odkazů. Klikneš-li na některý, přesuneš se automaticky k té části článku, kde se nadpis nachází.

Zatímco plugin vkládá do stránek svůj vlastní CSS soubor, já si vystačil se styly Bootstrapu a jednou třídou ve style.css.

Výsledek můžeš vidět v horní části tohoto článku.

Native lazyload

Jak funguje lazyload? Obrázky, videa či iframes, jež se nacházejí mimo zobrazenou část stránky, se nenačtou hned. Stane se tak teprve ve chvíli, kdy uživatel zascrolluje a přiblíží se k místu, kde se nalézají.

Sníží se tím množství přenesených dat, čímž se zrychlí načtení stránky, neboť spousta lidí si ji neprohlédne celou. V tom případě by bylo zbytečné tahat ze serveru obrázky, jež stejně neuvidí.

Tohoto efektu šlo až do nedávna docílit pouze díky Javascriptu. V dubnu 2019 však Chrome začal podporovat atribut loading=“lazy“. Označíš tak obrázky, jež chceš načíst teprve těsně před tím, než k nim návštěvníci doscrollují.

Naprogramoval jsem si tedy jednoduchou funkci, která zamění <img src=“obrazek.jpg“ alt=“…“ /> za <img loading=“lazy“ src=“obrazek.jpg“ alt=“…“ />.

Bloom

Bloom slouží k vytváření formulářů, díky nimž se tvoji čtenáři mohou zaregistrovat k odběru newsletteru (nebo jako v mém případě do e-mailového kurzu). Vzhledem k tomu, že jsem ho potřeboval jen k vytvoření designu a pro ostatní funkce (např. statistiky) mám vlastní řešení, stačilo mi k jeho nahrazení použít CSS styly Bootstrapu.

Bloom ho totiž buď sám využívá nebo minimálně převzal barevná schémata. Když jsem použil třídy Bootstrapu jako primary a secondary pro pozadí a odesílací tlačítka, zjistil jsem, že se jedná o stejné barvy jako v případě nasazení tohoto pluginu.

Následně jsem si vytvořil jednoduché png obrázky pro vytvoření „zubatého“ přechodu a jejich pozici specifikoval ve style.css. Ušetřil jsem tak opět docela dost kódu, který by Bloom vložil do stránek.

Výsledek si můžeš prohlédnout v levém sidebaru (viditelný jen pro obrazovky s dostatečnou šířkou, aby nepřekážel např. na mobilních telefonech) a pod každým článkem.

Doporučené články

Když pod článkem zobrazíš pár doporučení, co by si návštěvník mohl na tvém blogu ještě prohlédnout, přinese ti to následující výhody:

  • Zvýšíš šanci, že jej zaujmeš a že si toho přečte více.
  • Trochu ti to pomůže v rámci optimalizace pro vyhledávače. Interní odkazy předají PageRank tvým dalším článkům.
  • Pokud jimi upoutáš pozornost uživatele a klikne na ně, tím lépe. Více zhlédnutých stránek představuje pozitivní SEO faktor.

Jestliže se rozhodneš zobrazovat odkazy na související příspěvky, čeká tě dilema. Jak vybrat ty nejvhodnější? Já zvažoval tyto varianty:

  • Nejnovější příspěvky.
  • Ty s nejvíce komentáři.
  • Nejnovější ze stejné kategorie.
  • Náhodné články.
  • Náhodné ze stejné kategorie.
  • Se stejným štítkem, pokud by jich nebylo dostatek, doplnit ze stejné kategorie.

Když jsem vzal v potaz, že na ty zcela nejrelevantnější pravděpodobně odkážu přímo v článku, rozhodl jsem se pro úplně jiné řešení. Napsal jsem si funkci, která najde příspěvky, jež se nachází „na půl cesty“ mezi tím aktuálním a nejstarším.

V praxi to znamená, že bude-li mít blog 100 článků (10 stránek po 10), tak ty na homepage budou odkazovat na příspěvky kolem 5. a 6. stránky, zatímco např. články na 6. stránce na ty kolem 8. stránky.

Čtenář tak s jistou dávkou statistické pravděpodobnosti objeví témata, jež by mu mohla pomoci. Z hlediska SEO se PageRank nasměruje do míst, kde nejvíc chybí. Stránkování totiž zobrazuje odkazy jen na několik prvních a posledních podstránek, nikoliv na ty uprostřed.

Podtrženo, sečteno – uživatel i vyhledávač dostanou to, co potřebují. Jak to vypadá v praxi můžeš vidět pod tímto článkem.

Yoast SEO

Implementoval jsem všechny funkce tohoto pluginu, které využívám. Jedná se zejména o možnost přidat meta tag Description. Pokud jej nevyplním, vytvoří se automaticky.

Dále se do zdrojového kódu vloží tagy, díky nimž se při sdílení na Facebooku nebo Twitteru zobrazí velká náhledová fotografie a vhodný titulek s popisem.

Vůbec se nebudu zlobit, pokud to vyzkoušíš a budeš sdílet tento článek 🙂

Doposud jsem na svých stránkách vytvořených pomocí WordPressu používal jeden plugin, jenž zobrazoval cookie lištu a další pro vložení kódu Google Analytics.

S minimálním množstvím Javascriptu jsem si vytvořil lištu, která povolí načtení kódu Google Analytics až ve chvíli, kdy k tomu uživatel dá svolení.

SSL plugin

Pokud si prvně nainstaluješ SSL certifikát a teprve pak WordPress, stačí ti přidat pár řádků do souboru .htaccess, s jejichž pomocí přesměruješ http://tvoje-domena.com na https://tvoje-domena.com.

Nic dalšího nepotřebuješ, takže se obejdeš bez pluginu.

Stránka 404

Vytvořil jsem si i stránku 404. Tj. tu, co se zobrazí, když zadáš chybnou adresu článku. Včetně vlastní fotografie, jež koresponduje s trochu odlehčeným tónem, kterým píšu některé své příspěvky.

Schválně si zkus na konec adresního řádku přidat pár náhodných znaků a uvidíš 🙂

Pokud si také budeš přát udělat vlastní, jednoduše v adresáři se šablonou vytvoř soubor 404.php a uprav si jeho obsah k obrazu svému.

Existují pluginy, které zařídí, aby sidebar zůstal viditelný, i když uživatel scrolluje dolů. Já to vyřešil pomocí pár řádků kódu.

Nicméně zdá se, že v malém procentu případů musí čtenář až na konec stránky, aby se zobrazilo odesílací tlačítko formuláře. Takže tohle bude ještě potřeba vychytat.

Cache plugin

WordPress je docela robustní systém. Než sestaví stránku a ukáže ji návštěvníkovi, musí mimo jiné:

  • Vytáhnout data z konfiguračního souboru.
  • Vybrat správný soubor z adresáře se šablonou.
  • Získat obsah článku z databáze.
  • Zjistit, jaké pluginy jsou nainstalovány a vykonat to, k čemu slouží.

To někdy trvá i několik sekund. Pokud však WordPress jednou takhle komplikovaně stránku složí, může si ji uložit do tzv. cache souboru. Příště ho pošle uživateli rovnou. Docílíš toho nainstalováním některého z cache pluginů.

Ač jsem si jej také naprogramoval, testy ukázaly, že WP super cache při vhodném nastavení zrychlí načítání blogu mnohem víc. Takže se stal jediným pluginem třetí strany, který používám.

A tak vznikla nejrychlejší WordPress šablona na světě (nebo ne?)

Ještě než jsem se rozhodl vytvořit si vlastní šablonu, hledal jsem nějakou rychlou. Nepotřeboval jsem žádné sarapatičky, jen user-friendly řešení. A tak jsem zadal do Google něco jako Fastest WordPress themes.

Evidentně jsem ve škole nedával dostatečně pozor, tudíž jsem mylně předpokládal, že nejrychlejší šablona na světě může být jen jedna. Ale ono nééé.

Trochu mi to připomnělo situaci, když jsem hledal celosvětově nejprodávanější knihy. V závislosti na autorovi přehledu se na prvních pozicích nejčastěji objevovala buď Bible nebo životopis Mao Ce-Tunga.

Pokud totiž použiješ nějaký online nástroj na měření rychlosti načítání webu jako Pingdom Website Speed Test, tak výsledky nebudou vždy stejné. Někdy se liší i mnohonásobně.

Závisí to na více faktorech, např. vytíženosti serveru. Když jsem nainstaloval blog na VPS, na kterém nic jiného neběželo, načtení trvalo kolem 0,5 sekundy (takže cca na úrovni těch šablon, o nichž autoři testů tvrdili, že jsou nejrychlejší na světě). Když jsem si na server přidal skript pro rozesílání newsletterů, pomocí cronu nastavil různé operace, jež se vykonávaly každou minutu, tak se občas načítání protáhlo natolik, že by útlocitnější webmaster pociťoval nutkání na zvracení.

Takže pokud taky chceš mít nejrychlejší šablonu na světě, stačí ti k tomu 2 kroky:

  • Udělej si jí sám/a tak, aby měla pouze nezbytné funkce. Žádné parádičky jen pro efekt, které by ji zpomalovaly.
  • Při testování rychlosti prostě klikej na ten čudlíček ve formuláři tak dlouho, až ti to naměří nějakou slušnou hodnotu.

Aneb jak kdysi řekl Winston Churchill: Věřím pouze těm statistikám, které jsem sám zfalšoval.

Já se takto dostal na pěkných 367 milisekund.

Test rychlosti WordPress šablony

Na ještě zajímavější číslo se člověk dopracuje, když vezme v potaz, že jako poslední se s velkým zpožděním načetla favicon.

Test rychlosti WordPress šablony

Vše, co se zobrazuje přímo ve stránce, se načetlo pod 200 milisekund.

Test rychlosti WordPress šablony

A protože některé skripty vkládám pomocí oficiálního CDN serveru, reálný uživatel (na rozdíl od robota testujícího rychlost webu) s pravděpodobností limitně blížící se 100 % bude mít tyto soubory uloženy v cache prohlížeče, takže je nebude muset stahovat.

Pokud si tedy zhotovíš šablonu výše popsaným stylem, její rychlost ti vrásky na čele nenadělá. Za takových okolností zabere mnohem více času vlastní vykreslení stránky v prohlížeči, popř. zádrhely jako pomalý internet uživatele.

Hodila by se ti tato šablona?

Když už jsem dal dokupy vcelku obstojnou šablonu, logicky mě napadlo, že by se mohla hodit i někomu dalšímu.

V současném stavu ji sice nemohu vypustit do světa, protože k tomu bych musel doprogramovat pár nastavení (např. menu mám „natvrdo“ v kódu šablony, zatímco uživatel musí mít možnost si jej editovat z administrace WordPressu). Nicméně rád bych využil příležitosti a zjistil tvůj názor, abych věděl, má-li smysl to dotáhnout do konce.

Ve skutečnosti se mi na disku válí více různých vychytávek pro blogery a webmastery. Napadl mě proto následující model:

  • Šablonu (popř. další užitečné věci) nabídnout zdarma těm, kteří využijí pro hostování MarbleHost.com (mou webhostingovou službu).
  • Ty stejně potřebuješ hosting, takže by to pro tebe nepředstavovalo žádné náklady navíc.
  • Já bych tímto způsobem monetizoval výsledky své práce a mohl bych tak tomu věnovat více času.

Takže budu rád, když mi v komentářích povíš, jestli ti tento model přijde zajímavý.

Online kurz zdarma

Nauč se vydělávat pomocí vlastních stránek či blogu

Spousta lidí se živí online. Někteří i dost slušně. Chceš se stát jedním z nich? Emailový kurz na míru dle tvých zkušeností a znalostí. Zdarma. Jdeme na to?

Napsat komentář

*
*
*
*