Как мне версионировать основной CSS файл?

12 авг. 2010 г., 01:44:13
Просмотры: 22K
Голосов: 8

Как мне указать WordPress использовать имя файла отличное от 'styles.css' для моей основной таблицы стилей - например, styles-1.css? Я хотел бы сделать это для целей версионирования и кэширования.

0
Все ответы на вопрос 9
0
13

Это может быть неуместно, сообщите мне, если я что-то упустил.

Четвертый аргумент в wp_enqueue_style() — это номер версии таблицы стилей. В файле functions.php вашей темы:

function my_theme_styles() {
    // замените "10" на ваш номер версии; увеличивайте его при внесении изменений
    wp_enqueue_style('my-theme-style', get_bloginfo('template_directory') . '/style.css', false, 10);
}
add_action('wp_print_styles', 'my_theme_styles');

Требуется, чтобы ваш header.php содержал вызов wp_head(), что конечно же вы уже делали. ;)

Это позволяет установить долгие сроки действия заголовков для вашего CSS-файла и принудительно заставить клиентов загружать новый файл, обновляя номер версии. WordPress добавит "?ver=N" к URL вашего CSS-файла.

12 авг. 2010 г. 04:58:30
4

Добавьте этот код в файл functions.php вашей темы:

function my_cool_style_versioner( $style ){
  // Заменяем стандартный style.css на версионированный style-1.css
  return str_replace( '/style.css', '/style-1.css', $style );
}

// Применяем фильтр к URI таблицы стилей
add_filter( 'stylesheet_uri', 'my_cool_style_versioner' );
12 авг. 2010 г. 02:07:31
Комментарии

Предполагаю, мне нужно будет вызвать эту функцию откуда-то... (и, думаю, пропущенный / — это ошибка!)

Bobby Jack Bobby Jack
12 авг. 2010 г. 02:10:55

Да, пропущенный слэш был ошибкой, и я также добавил хук фильтра, который вам понадобится.

John P Bloch John P Bloch
12 авг. 2010 г. 02:18:49

Также обратите внимание, что по мере увеличения версии второй аргумент ('/style-1.css') будет меняться, но первый ('/style.css') всегда останется неизменным.

John P Bloch John P Bloch
12 авг. 2010 г. 02:23:15

потрясающе, нам нужно создать плагин для этого!

ariefbayu ariefbayu
12 авг. 2010 г. 03:07:47
2

Файл style.css обязателен для вашей темы WordPress. Именно из него WordPress получает название темы и мета-информацию для меню Внешний вид >> Темы. Однако на самом деле вам не обязательно использовать style.css в своей теме. Я знаю несколько популярных тем, которые его не используют, и сам применяю его лишь в некоторых своих кастомных дизайнах.

В файле header.php просто разместите следующий тег вместо стандартной ссылки на таблицу стилей:

<link rel="stylesheet" type="text/css" href="<?php bloginfo('stylesheet_directory'); ?>/style-1.css" />

Это загрузит вашу альтернативную таблицу стилей как основную для страницы, полностью игнорируя стандартный style.css.

12 авг. 2010 г. 03:09:41
Комментарии

Для ясности: у вас ДОЛЖЕН быть файл style.css в вашей теме WordPress с указанием названия темы. Но вам НЕ нужно загружать этот файл в header.php.

Doug Doug
12 авг. 2010 г. 19:58:47

И не стоит размещать стили напрямую в файлах темы - используйте вместо этого wp_enqueue_style - это гораздо удобнее для дочерних тем и плагинов.

Krzysiek Dróżdż Krzysiek Dróżdż
11 дек. 2013 г. 22:58:53
0

EAMann прав, вам не обязательно использовать файл style.css для всего вашего CSS.

Для версионирования таблицы стилей и других файлов в вашей теме вы можете добавить это в файл functions.php

function fileVersion($filename)
{
    // получаем абсолютный путь к файлу
    $pathToFile = TEMPLATEPATH.'/'.$filename;
    // проверяем, существует ли файл
    if (file_exists($pathToFile)) 
    {
        // возвращаем время последнего изменения файла
        echo filemtime($pathToFile);
    }
    else
    {
        // сообщаем, что файл не найден
        echo 'FileNotFound';
    }
}

И затем, когда вы создаете ссылку на вашу таблицу стилей, вы можете сделать так:

<link rel="stylesheet" type="text/css" media="all" href="<?php bloginfo( 'stylesheet_url' ); ?>?v=<?php fileVersion('style.css'); ?>" />

Таким образом, вам не нужно вручную обновлять номер версии — каждый раз, когда файл обновляется на сервере, версия автоматически изменится на соответствующую UNIX-метку времени.

12 авг. 2010 г. 12:44:49
0

Обратите внимание, что не следует использовать строки запроса для управления версиями файлов (прокси-сервера не кэшируют их).

Лучшим решением будет добавление номера версии в имя файла, например:

  • style.123.css
  • style.124.css

Мой подход заключается в следующем:

Редиректы через .htaccess в Apache

Если вы используете HTML5 boilerplate с Apache, вы можете найти следующий раздел в .htaccess файле:

# ------------------------------------------------------------------------------
# | Управление кэшированием на основе имен файлов                               |
# ------------------------------------------------------------------------------

# Если вы не используете систему сборки для управления версиями файлов,
# рассмотрите возможность включения следующих директив для перенаправления всех
# запросов вида `/css/style.12345.css` на `/css/style.css`.

# Чтобы понять, почему это важно и лучше, чем `*.css?v231`, прочитайте:
# http://stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring

<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpe?g|gif)$ $1.$3 [L]
</IfModule>

(Обычно нужно сначала раскомментировать эти строки)

Файл functions.php темы

Я хотел автоматически использовать версию моей темы для файла стилей, поэтому придумал следующее:

Вы можете добавить это в functions.php вашей темы:

function my_theme_styles() {
    $my_theme = wp_get_theme();
    $version = str_replace('.','',$my_theme->get( 'Version' ));
    $stylesheet = get_bloginfo('stylesheet_directory').'/style.'.$version.'.css';
    wp_enqueue_style('my-main', $stylesheet, false, null);
}
add_action('wp_print_styles', 'my_theme_styles');

Обратите внимание, что я указал null в качестве версии вместо false, чтобы WordPress не добавлял свою версию в строку запроса.

Результат

Для темы версии 1.0.2 это выводит стиль в таком формате:

<link rel='stylesheet' id='maw-main-css'  href='http://www.example.com/wp-content/themes/my-theme/style.102.css' type='text/css' media='all' />

После обновления темы до версии 2.0.0 в style.css, вывод будет следующим:

<link rel='stylesheet' id='maw-main-css'  href='http://www.example.com/wp-content/themes/my-theme/style.200.css' type='text/css' media='all' />

Дополнительные заметки

Учтите, что если вы просто удаляете точки из версии, как я сделал, могут возникнуть проблемы с версиями тем, такими как 1.2.23 и 1.22.3, так как обе версии без точек будут иметь вид 1223.

Лучшим решением будет учесть это в файле .htaccess. Например, можно разрешить подчеркивания между числами и заменить точки на них.

Это не тестировалось, но должно работать:

.htaccess

# ------------------------------------------------------------------------------
# | Управление кэшированием на основе имен файлов                               |
# ------------------------------------------------------------------------------
<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.+)\.([_\d]+)\.(js|css|png|jpe?g|gif)$ $1.$3 [L]
</IfModule>

functions.php

function my_theme_styles() {
    $my_theme = wp_get_theme();
    $version = str_replace('.','_',$my_theme->get( 'Version' ));
    $stylesheet = get_bloginfo('stylesheet_directory').'/style.'.$version.'.css';
    wp_enqueue_style('my-main', $stylesheet, false, null);
}
add_action('wp_print_styles', 'my_theme_styles');
6 мая 2014 г. 14:18:47
0

Можно просто использовать style.css как файл, в котором указывается нужная версия. Просто добавьте:

@import url("style-1.css");

Затем при обновлении версии просто измените на:

@import url("style-2.css");

Что касается сохранения версий, рассматривали ли вы использование Subversion или git? Это позволит вам вести полную историю изменений таблицы стилей. Возможно, я не до конца понимаю причины вашего управления версиями.

12 авг. 2010 г. 05:27:49
2

Я наткнулся на этот старый вопрос и обнаружил, что все ответы кажутся устаревшими в наши дни.

Я бы просто использовал версию темы, указанную в заголовке файла style.css. Её можно получить с помощью wp_get_theme()->get( 'Version' )

function my_enqueue_styles() {
    wp_enqueue_style( 'my-theme-style', get_template_directory_uri() . '/style.css', false, wp_get_theme()->get( 'Version' ) );
}
add_action( 'wp_enqueue_scripts', 'my_enqueue_styles' );

Таким образом, номер версии автоматически добавится к URL в виде ?ver=#.##, и URL изменится, как только версия темы будет увеличена в style.css.

5 нояб. 2016 г. 13:55:05
Комментарии

у меня вопрос. для чего указывать приоритет 40?

Shamsur Rahman Shamsur Rahman
5 нояб. 2016 г. 14:13:53

В данном случае не требуется указывать какой-то особый приоритет. Уберу это, спасибо.

JHoffmann JHoffmann
5 нояб. 2016 г. 18:07:00
0

В файле functions.php замените

wp_enqueue_style( 'twentysixteen-style', get_stylesheet_uri();

на

wp_enqueue_style( 'twentysixteen-style', get_stylesheet_uri(), array(), $ver );

Измените $ver на любое значение или используйте time() для режима разработки.

8 дек. 2016 г. 23:18:20
3

Не уверен, изменилось ли это в WP3, поэтому не могу сказать наверняка, но один из способов — напрямую отредактировать соответствующий php-файл (не знаю, можно ли это сделать через админку):

wp-folder/wp-content/themes/ваша-тема/

И откройте файл header.php. В этом файле найдите строку:

<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="screen" />

Чтобы добавить 'версию' к подключаемому стилю (предположим, вы хотите получить что-то вроде: stylesheetURL.css?version=2), измените её на:

<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>?version=2" type="text/css" media="screen" />

Это не самый элегантный способ, так что если есть вариант лучше, я бы и сам с радостью о нём узнал =)


Перечитал ваш вопрос...

Чтобы использовать другой файл стилей styles-1.css, вы можете просто изменить строку (см. выше) на:

<link rel="stylesheet" href="absolute/or/root-relative/path/to/styles-1.css" type="text/css" media="screen" />

(По сути, заменив <?php ... ?> на обычный путь к файлу.)

12 авг. 2010 г. 02:07:17
Комментарии

"Это выглядит несколько неуклюже" — да, особенно если я хочу использовать файл с именем "style-1.css"! ;-)

Bobby Jack Bobby Jack
12 авг. 2010 г. 02:11:38

@Bobby Jack, согласен и +1 (хотя я попытался добавить столь же неуклюжий подход для достижения вашей цели). =/

David Thomas David Thomas
12 авг. 2010 г. 02:13:40

Ладно. Полагаю, я беспокоился, что stylesheet_url может использоваться где-то еще, но на самом деле для этого нет причин, верно? Есть еще момент, что было бы неплохо иметь механизм автоматического обновления, чтобы всегда использовать самую свежую версию файла, но сейчас я просто начинаю выявлять недостатки в своем вопросе :)

Bobby Jack Bobby Jack
12 авг. 2010 г. 02:27:07