Верх страницы
Обложка к записи Автосброс кеша стилей и скриптов
Время для прочтения: 0 мин. 37 сек.

Автосброс кеша стилей и скриптов

Пуленепробиваемый сниппет под WordPress для автоматического сброса кеша стилей и скриптов путем добавления к их URL параметра с датой обновления самого этого файла.

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

Чтобы не забывать постоянно менять версию руками в каждом подключаемом файле, можно использовать встроенную в PHP функцию filemtime, которая по пути к файлу возвращает дату его последнего изменения:

wp_enqueue_script(
	'app',
	get_theme_file_uri( 'js/app.js' ),
	[ 'jquery' ],
	filemtime( get_theme_file_path( 'js/app.js' ) ),
	true
);

Чтобы не прописывать filemtime для каждого ассета в вашей теме или плагине, можно воспользоваться данным сниппетом, который сделает всё за вас:

/**
 * Автоматически добавляем к каждому ассету на сайте
 * версию его изменения для сброса кэша браузера при деплое.
 */
function mihdan_add_modified_time_to_asset( $src ) {

    if ( is_admin() ) {
        return $src;
    }      

	$base_url = wp_styles()->base_url;

	if ( $src && strpos( $src, $base_url ) !== 0 ) {
		return $src;
	}

	$src  = remove_query_arg( 'ver', $src );
	$path = wp_parse_url( $src, PHP_URL_PATH );

	if ( $mtime = @filemtime( untrailingslashit( ABSPATH ) . $path ) ) {
		$src = add_query_arg( 'ver', $mtime, $src );
	} else {
		$src = add_query_arg( 'ver', md5( microtime() . rand() ), $src );
	}

	return $src;

}
add_filter( 'style_loader_src', 'mihdan_add_modified_time_to_asset', PHP_INT_MAX );
add_filter( 'script_loader_src', 'mihdan_add_modified_time_to_asset', PHP_INT_MAX );

Автор: Кобзарёв Михаил

Русский разработчик с 20-ти летним стажем. Работаю с PHP, ООП, JavaScript, Git, WordPress, Битрикс, Joomla, Drupal, Opencart, DLE, Laravel, Moonshine, SuiteCRM.

Оптимизирую сайты под Google Page Speed, настраиваю импорты для больших магазинов на WooCommerce + WP All Import. Пишу плагины на заказ. Все мои услуги.

Веду блог о разработке, дайджест в телеграмме и в ВК.

Вы всегда можете нанять меня.

Комментарии
Подписаться
Уведомить о
guest

2 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Денис
Денис
6 месяцев назад

Просьба ( предложение ), сделайте кнопки копировать код который вы выкладывает.

Вопрос: этот снимает устанавливать на время разработки и потом удалять или его можно оставить на постоянной основе? Если прописывать для каждого, подскажите как будет для стилей?

Предыдущая запись

Давайте дружить
в Телеграме

Авторский блог вашего покорного слуги в Telegram про web, программирование, алгоритмы, инструменты разработчика, WordPress, Joomla, Opencart, Laravel, Moonshine, фильмы и сериалы