Автосброс кеша стилей и скриптов
Пуленепробиваемый сниппет под 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 );
Просьба ( предложение ), сделайте кнопки копировать код который вы выкладывает.
Вопрос: этот снимает устанавливать на время разработки и потом удалять или его можно оставить на постоянной основе? Если прописывать для каждого, подскажите как будет для стилей?
Этот сниппет можно и на проде оставить, зависит от ваших нужд. Обычно на проде вообще сборщик стоит типа webpack/grunt/gulp или плагин кэширования wp-rocket/wp-super-cache.