Úvodní stránka › Fórum podpory WordPressu › Problémy s WordPressem › Kde změním cestu k style.css? Refresh stránek.
Štítky: Aktualizace CSS, bloginfo(), CSS, filemtime(), get_stylesheet_directory(), wp_enqueue_script(), wp_enqueue_style()
Zvolené téma obsahuje celkem 9 odpovědí. Do diskuze (4 účastníci) se naposledy zapojil uživatel Mike a poslední změna je stará 10 let, 4 měsíce.
-
AutorPříspěvky
-
22. září 2011 (9:54) #1198
Ahoj, kde můžu změnit cestu ke stylům šablony? Resp. udělal jsem změny ve stylech a samozřejmě vzniká problém s cache prohlížečů u návštěvníků – zobrazuje se původní podoba, která teď nesedí. Potřeboval bych styly přejmenovat a změnit k nim cestu.
Popřípadě, nedá se “refresh” stránek ošetřit i jinak?
22. září 2011 (11:36) #9367Není třeba měnit cestu ke stylům, možností je ve WordPressu více:
1) Můžete nastavit, aby se načítaná stránka v prohlížeči vůbec neukládala (návod):
<META http-equiv="cache-control" content="no-cache">
To ale není ideální, protože se budou soubory pokaždé znovu načítat.
2) Proto je lepší varianta s verzováním souboru
style.css
. Teoreticky pokaždé když ho změníte, tak můžete zasáhnout do souboruheader.php
, kde je obvykle načítán a přiřadit mu např. parametr?v=1.01
. Ručně to ale není ideální, takže je lepší nechat to dělat WordPress automaticky podle nějaké podmínky, kterou je datum změněného souborustyle.css
. Stačí pak využít PHP funkce filemtime() a tedy pokaždé, když bude souborstyle.css
aktualizován, tak se automaticky změní i verze souborustyle.css
(příklad). Stačí tedy změnit stávající kód s načítaným souboremstyle.css
na tento:<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); echo '?' . filemtime( get_stylesheet_directory() . '/style.css'); ?>" type="text/css" media="screen, projection" />
Jednoduché a funkční… Jakmile změníte styly, tak u všech návštěvníků vyvoláte refresh souboru se styly…
22. září 2011 (13:26) #9368Jak přesně se chová funkce
filemtime()
, netahá se potomstyle.css
pořád znovu bez cache?22. září 2011 (13:40) #9369Soubor
style.css
se načítá každému znovu (bez cache) v případě, kdy došlo ke změně souboru. Funkcefilemtime()
zjišťuje datum a čas poslední úpravy souborustyle.css
. Takže pokud teď změníte soubor a návštěvník byl na webu naposledy včera, tak se mu souborstyle.css
načte znovu. Pokud přijde znovu zítra a souborstyle.css
už nebude aktualizován, tak si bude brát prohlížeč soubor z cache. Alespoň tak by to mělo fungovat…22. září 2011 (15:05) #9370Mám originál kód trochu komplikovanější vzhledem k možnosti zvolit si světlou nebo tmavou podobu šablony. Jak by měl potom vypadat kód s funkcí
filemtime()
?<link rel="stylesheet" href="<?php bloginfo('template_url'); ?>/style<?php echo get_option('theme_site_style')=='light' ? '-light' : ''; ?>.css" type="text/css" media="screen" />
22. září 2011 (18:41) #9371Dělané ve spěchu, ale mělo by fungovat:
<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); echo '?' . filemtime( get_stylesheet_directory() . '/style.css'); ?>/style<?php echo get_option('theme_site_style')=='light' ? '-light' : ''; ?>.css" type="text/css" media="screen" />
22. září 2011 (19:00) #937222. září 2011 (19:22) #9373lucky.man: Ano,
stylesheet_url
je obecnější a počítá i s odvozenými šablonami, které na webu nepoužíváš. Pokud bys využíval odvozenou šablonu (child theme), což je mimochodem správný (!) způsob vlastních úprav šablony, takstylesheet_url
bude odkazovat na souborstyle.css
přímo v adresáři odvozené šablony, zatímcotemplate_url
bude odkazovat do adresáře nadřazené (rodičovské, parent) šablony. Každá má trochu jiné účely a použití, nelze říci, která je lepší/vhodnější…Důležité je ještě zmínit funkci get_stylesheet_directory(), pomocí které získáme absolutní cestu na serveru do adresáře se souborem
style.css
.neteyescz: Vypadá to dobře, ale je tam jedna chybka. Testuješ pomocí funkce
filemtime()
obě dvě varinaty souboru se styly, ale zobrazuješ stále jenom jeden, a tostyle.css
:-) Každopádně dobrá práce…Řešili jsme to už s tazatelem emailem a podle mě je to asi ideálně takto (podmínka změněna na klasickou kvůli přehlednosti kódu):
<?php if ( get_option( 'theme_site_style' ) == 'light' ) { $append_color = '-light'; } else { $append_color = ''; } ?><br /> <link rel="stylesheet" href="<?php bloginfo( 'template_url' ); echo '/style' . $append_color . '.css?' . filemtime( get_stylesheet_directory() . '/style' . $append_color . '.css' ); ?>" type="text/css" media="screen" />
20. listopadu 2011 (17:35) #9374A ještě doplním, že celou problematikou se zabývá nový článek (anglicky), který to řeší v případě načítání souborů pomocí parametru
$ver
u funkcí wp_enqueue_script() a wp_enqueue_style(). Kromě přidávání aktuálního času a data, času změněného souboru přidává i možnost snychronizace verzování souborů s aktuální verzí vlastního pluginu.29. listopadu 2013 (18:16) #9376Zdravím,
před časem jsem podle Vašeho návodu (výše) ve své šabloně přepsal řádek:<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" />
na:
<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); echo '?' . filemtime( get_stylesheet_directory() . '/style.css'); ?>" type="text/css" media="screen, projection" />
…a bylo to ok.
Teď jsem ale updatoval na novou verzi šablony a tam ten řádek není. Co se týče “stylesheet” tam mám teď toto:
<?php wp_deregister_style( 'style-css' ); wp_register_style( 'style-css', get_stylesheet_uri() ); wp_enqueue_style( 'style-css' ); ?> <!--[if lte IE 8]> <link rel="stylesheet" href="<?php bloginfo('template_directory'); ?>/css/ie8.css" /> <![endif]--> <!--[if IE]> <link rel="stylesheet" href="<?php bloginfo('template_directory'); ?>/css/ie.css" /> <![endif]-->
Poradili byste prosím, jak do toho naimplementovat opět to s tou funkcí
filemtime()
?
(Nejsem odborník)Děkuji.
-
AutorPříspěvky
Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.