Intereting Posts
Список пользователей Комментарии к профилю пользователя BuddyPress Как установить плагины темы wordpress? Правило перезаписи для страницы пользовательского типа отправки в качестве родительского Сделать отображаемое изображение доступным для нескольких страниц? Статус перехода не работает Получить ширину изображения из файла WP_Customize_Image_Control () в WP Theme Customizer Как сделать несколько столбцов в архивной странице? Как исправить недостающую функцию в wp-cron? Не удается загрузить admin-ajax.php. Отсутствие контроля доступа позволяет происходить * отображать случайные сообщения на index.php вместо последних Когда использовать дочернюю тему для WooCommerce Storefront? Остановить автоматическое форматирование в коротких кодах Есть ли фильтр, который я могу использовать для фильтрации тегов, прежде чем они будут вставлены в базу данных? Исключить изображения, загруженные через мета-окна из галереи WordPress У меня есть обычная таксономия, назначенная двум типам сообщений. Как создать URL-адреса для разных архивов терминов для каждого типа сообщений?

Кэширование файлов CSS, отличных от style.css

Хорошо, поэтому мы, вероятно, все знаем типичный способ убедиться, что ваш основной файл CSS обновлен при загрузке страницы (перебор кеша браузера), правильно?

<link rel="stylesheet" type="text/css" media="all" href="<?php echo get_stylesheet_uri(); echo '?'.filemtime( get_stylesheet_directory() . '/style.css'); ?>" /> 

Мне нужно сделать то же самое в другом файле CSS. Да, у моего файла style.css есть свой собственный набор @import «css / myFile.css», который отлично работает, но, если хотите, юните меня. Итак, вернемся к header.php, сразу после этой первой ссылки и перед вызовом wp_head ():

 <?php $cssFile = get_stylesheet_directory_uri().'/css/other.css'; ?> <link rel="stylesheet" type="text/css" media="all" href="<?php echo $cssFile; echo '?'.filemtime($cssFile); ?>" /> 

И это приводит к предупреждению (как часть атрибута href ссылки, когда браузер получает страницу):

Предупреждение: filemtime (): сбой stat для http: //localhost/wordpress/wp-content/themes/my_theme/css/other.css

путь к файлу, кажется, построен правильно (и файл other.css есть), но filemtime (stat, фактически) терпит неудачу на нем. Как так?

Другие рекомендуемые способы включения «последней» версии файла CSS, отличного от style.css? Должен ли я пойти с wp_register_style ? Если это так … как я могу сказать wp_register_style, чтобы подорвать кеш браузера (т. Е. Получить последнюю версию файла css, даже если браузер кэширован)? заранее спасибо

Вы используете путь файла в первом вызове, но его URL-адрес во втором. Так что это не сработает.

Я склонен просто ставить в очередь главную таблицу стилей, используя wp_enqueue_style , и добавлять что-то к версии, когда я хочу предотвратить кеширование.

 $ver = ''; wp_enqueue_style( 'theme_style', get_bloginfo('stylesheet_url'), false, $ver ); 

Когда я хочу остановить кеширование, я обновляю $ver до того, что будет постоянно меняться, например время.

 $ver = time(); 

Или что-то подобное ..

Вот код, который у меня есть из невыпущенного плагина CDN, который у меня есть. Он автоматически заменит ver query_var, который функции enqueue будут использовать с временем файла:

 class CDN_VersionAssets { private $default_version = ''; private $root_url; public function __construct() { $this->root_url = site_url(); } public function initialize() { add_filter('style_loader_src', array($this, 'replace_version'), 10); add_filter('script_loader_src', array($this, 'replace_version'), 10); add_filter('stylesheet_uri', array($this, 'replace_version'), 10); } public function on_template_redirect() { $this->default_version = @filemtime(get_stylesheet_directory().'/style.css'); } private function get_version($url) { if(0 === strpos($url, $this->root_url)) { $parts = parse_url($url); $file_path = str_replace(site_url('/'), ABSPATH, $parts['scheme'].'://'.$parts['host'].$parts['path']); if( !($version = @filemtime($file_path)) ) { $version = $this->default_version; } return $version; } return false; } public function replace_version($src) { if( $new_version = $this->get_version($src) ) { return add_query_arg('ver', $new_version, $src); } return $src; } } add_action('init', array(new CDN_VersionAssets(), 'initialize')); 

Если вы предпочитаете не использовать стандартный файл style.css для вашего CSS-кэширования CSS-темы WordPress , вот пример рабочего кода:

 <?php // Prevent CSS Caching $css_link = get_stylesheet_directory_uri() . '/css/screen.css'; $css_file = get_stylesheet_directory() . '/css/screen.css'; ?> <link href="<?php echo $css_link . '?' . filemtime( $css_file ); ?>" /> 

Результатом будет следующий вывод HTML:

 <link href="http://example.com/wp-content/themes/theme-name/css/screen.css?1349389530" /> 

Для краткости этого примера я исключил rel="stylesheet" type="text/css" в элемент <link> , поэтому обязательно добавьте эти атрибуты в свою окончательную разметку.

Я написал свою небольшую функцию как плагин для таких заданий. Он принимает два параметра, путь, который необходимо добавить, и формат даты. Вот пример использования …

 <?php echo cache_busting_path('/css/reset.css', 'Ym-d_g:i:s'); ?> 

что приведет к http://pewsocialtrends.org/wp-content/themes/pew-socialtrends/css/reset.css?2010-11-11_6:47:45

Вот код:

  <?php /* Plugin Name: Cache Busting Path Description: Function that returns a path with a cache-busting query string based on the last time the file was updated. Version: 1.0 Author: Russell Heimlich Author URI: http://www.russellheimlich.com/blog/ License: GPL2 */ function cache_busting_path($path, $time_format = 'U') { if( $path[0] != '/' ) { //Checks for the first character in $path is a slash and adds it if it isn't. $path = '/' . $path; } return get_bloginfo('template_url') . $path . '?' . date($time_format, filemtime( get_theme_root() . '/' . get_template() . $path ) ); } ?> 

Просто: используйте URl для загрузки стиля и пути для получения filemtime() :

 wp_register_style( 'handle', get_stylesheet/template_directory_uri().'/path/to/your/stylesheet.css', array( 'possible_dependency' ), filemtime( plugin_dir_path( __FILE__ ).'path/to/your/stylesheet.css' ) ); 

В результате URl будет чем-то вроде

 <link href="http://example.com/wp-content/themes/path/to/your/stylesheet.css?1379012967924">