Привязка номера версии к основной таблице стилей дочерней темы

В header.php мне нравится присваивать номер версии таблице стилей, чтобы браузеру пришлось обновить ее. Но при работе с дочерней темой его таблица стилей не называется явно, а WordPress автоматически ищет ее. Итак, как и где атрибут номера версии для таблицы стилей дочерней темы?

Вы можете обновить версию в самой таблице стилей дочерних тем …

/* Theme Name: Twenty Fourteen Child Theme URI: http://example.com/twenty-fourteen-child/ Description: Twenty Fourteen Child Theme Author: John Doe Author URI: http://example.com Template: twentyfourteen Version: 1.1.2 <---- Update here */ 

Я думаю, что лучший способ сделать это – оставить пустую таблицу стилей для детей (style.css) пустым только с необходимыми комментариями (например, имя темы, описание и т. Д., Чтобы WordPress распознал вашу тему), а затем сделать еще один файл css в вашем – тема-имя-папки / CSS / main.css

После этого на function.php вы можете иметь новую «версию» каждый раз, когда вы меняете файл:

 function my_scripts_and_styles(){ $cache_buster = date("YmdHi", filemtime( get_stylesheet_directory() . '/css/main.css')); wp_enqueue_style( 'main', get_stylesheet_directory_uri() . '/css/main.css', array(), $cache_buster, 'all' ); } add_action( 'wp_enqueue_scripts', 'my_scripts_and_styles', 1); 

Логика:

Каждый раз, когда вы сохраняете файл, изменяется время изменения файла. Новое время передается в функцию даты, чтобы преобразовать время (filemtime возвращает целое число, представляющее время) в формат даты, чтобы сделать его строкой в ​​желаемом формате. В нашем примере время форматируется с точностью до минут. Вы можете изменить его для отслеживания даже второго, то есть "YmdHis" После этого новое измененное время файла передается как новая версия в wp_enqueue_style .

Справка :

http://www.php.net/filemtime

http://php.net/manual/en/function.date.php

Что вам нужно сделать, это де-регистр основного стиля с помощью дескриптора, а затем повторная регистрация с номером вашей версии. В этом случае дескриптор имеет style-css .

Вы можете определить дескриптор, который вам нужно использовать, посмотрев ссылку на выделенную таблицу стилей:

 <link rel='stylesheet' id='style-css-css' href='http://site-url/wp-content/themes/child-theme/style.css?ver=4.6.1' type='text/css' media='all' /> 

Здесь id – style-css-css что означает, что наш дескриптор – style-css

Поместите это в function.php вашей дочерней темы:

 function wpse_145141_change_style_version(){ // First de-register the main stylesheet wp_deregister_style( 'style-css' ); // Then add it again, using your custom version number wp_register_style( 'style-css', get_stylesheet_uri(), array(), "VERSION_NUMBER" ); //finally enqueue it again wp_enqueue_style( 'style-css'); } add_action( 'wp_enqueue_scripts', 'wpse_145141_change_style_version'); 

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

Вместо использования стандартного стиля style.css я обычно использую wp_enqueue_style в функции functions.php дочерней темы или другой включенный php-файл. Таким образом, у вас все еще будет стиль style.css в дочерней теме со всеми подробностями детской темы, но тогда у вас может быть отдельный файл css в дочерней теме для фактического стилей детской темы (обычно я помещаю это в активы / css каталог в дочерней теме). Это также позволит вам установить версию CSS с 4-м параметром. Например:

 function theme_name_child_scripts() { wp_enqueue_style( 'style-name', get_stylesheet_directory_uri() . '/assets/css/child-style.css', array(), '1.0.0', 'screen'); } add_action( 'wp_enqueue_scripts', 'theme_name_child_scripts' ); 

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

 add_action( 'wp_enqueue_scripts', 'theme_name_child_scripts', 20 );