Хорошей практикой при разработке тем и плагинов для WordPress является добавление номеров версий к скриптам и файлам стилей. Если этого не делать, то старые пользователи могут столкнуться с проблемами при обновлениях, ведь они будут получать кэшированные в браузерах старые файлы, а не новые, над которыми вы так усердно работали всю ночь.
Большинство решений сводятся к использованию функции filemtime
для определения времени последнего изменения файла. У новичков она часто не работает по причине неверного указания путей к файлам, но даже так бывают ситуации, когда возможностей такого подхода не хватает и требуется бОльшая степень контроля за обновлениями.
В таком случае можно создать константу, содержащую в себе номер версии всего проекта целиком, и обновлять эту константу при каждом коммите, с помощью хука pre-commit
.
Вот как это делается:
- Открыть в проекте папку
.git/hooks/
- Найти или создать файл
pre-commit
(неpre-commit.sample
) - Добавить команды которые записывают в файл общее количество коммитов в репо
- При наличии файла
www/wp-content/build_number
вwp-config.php
объявляется константаBUILD_NUMBER
с цифрой
Содержимое файла pre-commit
#!/bin/bash git rev-list --all --count > www/wp-content/build_number git add www/wp-content/build_number
Новые константы в wp-config.php
// указываем путь к файлу с номером сборки $build_number_file = ABSPATH . '/wp-content/build_number'; // если файл существует, кладем его содержимое в константу if ( file_exists( $build_number_file ) ) { define( 'BUILD_NUMBER', (int) file_get_contents( $build_number_file ) ); } // Используем номер сборки для константы ASSETS_VERSION, и текущее время для облегчения дебага без необходимости коммита if ( defined( 'WP_DEBUG' ) and WP_DEBUG ) { define( 'ASSETS_VERSION', time() ); } else { define( 'ASSETS_VERSION', defined( 'BUILD_NUMBER' ) ? BUILD_NUMBER : date( 'Ymd' ) ); }
Добавляем константу с номером версии в стили и скрипты
// подключение скриптов с константой версии wp_enqueue_script( 'wordpressify-scripts', get_template_directory_uri() . '/assets/js/scripts.min.js', [ 'jquery' ], ASSETS_VERSION, true ); // подключение стилей с константой версии wp_register_style( 'wordpressify-css', get_template_directory_uri() . '/assets/css/style.min.css', [], ASSETS_VERSION ); wp_enqueue_style( 'wordpressify-css' );
Теперь можно использовать константу не только для добавления версий к скриптам и стилям, а вообще в любом месте проекта, где это необходимо.
Ошибки и пути решения
Иногда первая строка файла pre-commit может быть такой: #!/bin/sh
P.S. Спасибо Жене Великому за идею.