WordPress как на ладони

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

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

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

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

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

    Комментировать
  • 3
    Dan Zakirov525 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 6 месяцев назад

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

    Dan Zakirov 6 месяцев назад

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

    el-lable 6 месяцев назад

    timeweb.ru

    Dan Zakirov 6 месяцев назад

    ааа... mosking

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