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

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

Пуленепробиваемый сниппет под 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 );
ВКонтакте
Одноклассники
Linkedin
Telegram
WhatsApp

Комментарии