Удаляем версии в загружаемых скриптах и стилях WordPress
SEO

Удаляем версии в загружаемых скриптах и стилях WordPress

12 сентября 2016 109

Если вам когда-нибудь приходилось заниматься оптимизацией сайтов, наверняка, вы пользовались лучшим в своём роде бесплатным сервисом — GTmetrix. 

ThemeForest: Лучшие темы для WordPress
ThemeForest: Лучшие темы для WordPress

В этой статье я не буду подробно останавливаться на возможностях GTmetrix. Отмечу лишь, что сервис предоставляет очень полезную информацию по работе сайтов, которая реально помогает в их оптимизации.

GTmetrix

Бесплатный сервис, который поможет вам анализировать скорость работы вашего сайта. Используя Page Speed and YSlow, GTmetrix изучит ваш сайт, покажет имеющиеся ошибки в работе и предоставит рекомендации о том, как их исправить.

  Перейти

GTmetrix настолько крут, что имеет даже собственный плагин для WordPress. Благодаря которому, сайт можно протестировать не покидая администраторской консоли WordPress.

Анализизруя сайты на WordPress можно заметить, что GTmetrix практически всегда рекомендует удалить строковые запросы со статичных ресурсов.

Remove query strings from static resources

Resources with a «?» in the URL are not cached by some proxy caching servers. Remove the query string and encode the parameters into the URL for the following resources.

Не сложно догадаться, речь идёт о переменных, передаваемых при загрузке скриптов и стилей в WordPress. И в этом не помогают даже известные плагины кэширования: WP Super Cache и W3 Total Cache. 

Действительно, WordPress передаёт версию загружаемым скриптам и стилям, что может быть полезно для контроля пользовательского кэша во время разработки или отладки сайта. В боевых же условиях это совершенно лишнее, т.к. многие прокси-серверы просто не кэшируют запросы с переменными. То есть все загружаемые стили и скрипты не будут кэшироваться в браузере пользователя, а будут при каждом запросе страницы генерироваться и загружаться заново. А это дополнительное время загрузки страницы, дополнительная нагрузка на сервер, дополнительный трафик, наконец.

О том как справиться с данной проблемой мы сегодня и поговорим.

1. Тема

С темой все просто. Загрузка скриптов в WordPress осуществляется с помощью функции wp_enqueue_script(), стилей — wp_enqueue_style().

Скрипты:

wp_enqueue_script( string $handle, string $src = false, array $deps = array(),string|bool|null $ver = false, bool $in_footer = false )

Стили:

wp_enqueue_style( string $handle, string $src = false, array $deps = array(),string|bool|null $ver = false, string $media = 'all' )

В обеих функциях за номер версии отвечает параметр $ver. Если его нет (а по-умолчанию его нет), то в качестве версии будет передаваться текущая версия WordPress. Чтобы отключить передачу версий, находим все регистрации скриптов и стилей в functions.php и вместо версии просто указываем null.

Если скрипты темы подключаются без регистрации в functions.php, естественно, никакие версии никуда не передаются.

Способ с правкой кода темы подойдет только в том случае, если вы используете необновляемую или дочернюю тему. Потому что при обновлении темы, все внесённые изменения в functions.php пропадут.

2. Плагины

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

Поэтому, пойдем иным путем и создадим два хука, которые скроют версии во всех зарегистрированных подключениях скриптов и стилей. Код традиционно размещаем в файле functions.php активной темы или в функциональном плагине, в который вы выносите все кастомизации. Ведь выносите? 😉

function clear_scripts() {
	global $wp_scripts;
	if (!is_a($wp_scripts, 'WP_Scripts'))
		return;
	foreach ($wp_scripts->registered as $handle => $script)
		$wp_scripts->registered[$handle]->ver = null;
}

function clear_styles() {
	global $wp_styles;
	if (!is_a($wp_styles, 'WP_Styles'))
		return;
	foreach ($wp_styles->registered as $handle => $style)
		$wp_styles->registered[$handle]->ver = null;
}

add_action('wp_print_scripts', 'clear_scripts', 999);
add_action('wp_print_footer_scripts', 'clear_scripts', 999);

add_action('admin_print_styles', 'clear_styles', 999);
add_action('wp_print_styles', 'clear_styles', 999);

Если по какой-то причине хуки не сработают, можно попробовать воспользоваться фильтром.

function wg_remove_script_version( $src ){
	$parts = explode( '?', $src );
	return $parts[0];
}
add_filter( 'script_loader_src', 'wg_remove_script_version', 15, 1 );
add_filter( 'style_loader_src', 'wg_remove_script_version', 15, 1 );

Теперь все версии в подключениях скриптов и стилей, которые инициируются в активной теме и плагинах должны просто исчезнуть.

Автор: Иван Данилин

Практикующий веб-разработчик, специализируюсь на платформе WordPress.

Комментарии

Разгоните свой WordPress

Хостинг-провайдер номер один в России — REG.RU

Подробнее