Ú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á 12 let, 7 měsíců.
-
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.cssaktualizová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.cssna 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.csspořád znovu bez cache?22. září 2011 (13:40) #9369Soubor
style.cssse 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.cssnačte znovu. Pokud přijde znovu zítra a souborstyle.cssuž 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_urlje 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_urlbude odkazovat na souborstyle.csspřímo v adresáři odvozené šablony, zatímcotemplate_urlbude 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
$veru 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.