WordPress как на ладони
rgbcode is looking for WordPress developers. eurobyte.ru - мощные сервера с Дата-центрами в Нидерландах и Москве. От 159 ₽/мес.

Может ли wordpress самостоятельно обновлять закэшированные стили в браузере пользователя?

Проблема следующая: после внесения изменений на сайт и добавления правок в стилевой файл css, разметка обновляется, а стили нет (закэшированы в браузере). В связи с чем сайт отображается некорректно. Я-то сам понимаю, что мне надо очистить кэш браузера, но остальные посетители сайта этого не знают, и у них всё отображается криво.

Есть ли какой-то способ, позволяющий принудительно обновлять стили сайта в браузерах пользователей? Может, отправка каких-то заголовков и т.д.? Как это можно реализовать?

Заметки к вопросу:
Kama 1.5 года назад
0
Данила
1.5 года назад
  • 0
    el-lable620 el-lable.ru

    Поставить любой плагин кеширования(да да, именно так, как не странно), который умеет выводить стили прям в HTML странички.

    Комментировать
  • 3
    Dan Zakirov705 air-wp.com

    Используйте версионность подключенных скриптов и стилей.

    Например можно подключить файл стилей так:

    $style_path = get_template_directory_uri() . '/style.css';
    $style_ver = filemtime( get_stylesheet_directory() . '/style.css' );
    wp_enqueue_style( 'my-style', $style_path, array(), $style_ver );

    Функция filemtime() будет получать время последнего изменения файла style.css, таким образом при внесении изменений в css, будет меняться версионность стайла

    Можно пойти дальше, попробовать следующий вариант

    function air_dynamic_styles_versioning() {
    	global $wp_styles;
    
    	foreach( $wp_styles->registered as $style ) {
    		// Получаем путь к файлу стиля
    		$path = parse_url( $style->src, PHP_URL_PATH );
    		// Получаем полный путь к файлу стиля на сервере
    		$file = ABSPATH . $path;
    		// Получаем дату последней модификации файла стиля
    		$modified_time = filemtime( $file );
    		// Формируем динамический номер версии на основе даты обновления
    		$version = date( 'ymd-Gis', $modified_time );
    		// Заменяем старую версию на новую
    		$style->ver = $version;
    	}
    }
    add_action( 'wp_enqueue_scripts', 'air_dynamic_styles_versioning' );

    Смысл такой - мы перебираем все зарегистрированные стили и для каждого из них получаем путь к файлу, далее определяем дату последней модификации файла. Этот код принудительно меняет версионность всех CSS файлов, в том числе и чужих, но можно получить стили только активной темы:

    function air_dynamic_styles_versioning() {
    	global $wp_styles;
    
    	foreach( $wp_styles->registered as $style ) {
    		// Проверяем, является ли стиль частью активной темы
    		if ( strpos( $style->src, get_stylesheet_directory_uri() ) === 0 ) {
    
    			// Получаем путь к файлу стиля
    			$path = str_replace( get_stylesheet_directory_uri(), '', $style->src );
    			// Получаем полный путь к файлу стиля на сервере
    			$file = get_stylesheet_directory() . $path;
    			// Получаем дату последней модификации файла стиля
    			$modified_time = filemtime( $file );
    			// Формируем динамический номер версии на основе даты обновления
    			$version = date( 'ymd-Gis', $modified_time );
    			// Заменяем старую версию на новую
    			$style->ver = $version;
    		}
    	}
    }
    add_action( 'wp_enqueue_scripts', 'air_dynamic_styles_versioning', 999 );

    А если хотите проще, то плагин Autotomize, плагин хороший, разрабы чистят зубы красным кирпичем, поэтому можно юзать спокойно. Не думаю, что вам будет затруднительно надавить на кнопочку "очистить кеш"

    el-lable 1.5 года назад

    Все правильно, но не поможет если хостер сам по себе не хеширует контент.

    Dan Zakirov 1.5 года назад

    Это надо еще поискать такой хост, вы не можете дать примеры, где такие отмороженные сидят в 23 году?

    el-lable 1.5 года назад

    timeweb.ru

    Dan Zakirov 1.5 года назад

    ааа... mosking

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация