Как кешировать бюст дочерней темы style.css

8

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

Я читал в нескольких местах, что WP должен / будет помещать версию WP, nnnкогда ресурс выбирается как http://host/wp-content/themes/theme-child/style.css?ver=nnn. В моей установке на http://frightanic.com/ я вижу, что вместо этого используется версия родительской темы . У меня есть W3 Total Cache и CDN, но даже если они отключены, wp-content/themes/frightanic/style.css?ver=3.0.7запрашивается подобный ресурс . 3.0.7версия родительской темы Decode

Но как бы то ни было, если я обновлю свою дочернюю тему CSS, не обновляя одновременно ни WP, ни родительскую тему, как я могу удалить ее из кэшей?

Марсель Стёр
источник

Ответы:

11

Комментарии @ dalbaeb в конечном итоге привели к глубоким дискуссиям и возможным решениям. Большое спасибо!

Я полагаю, что причина, по которой моя дочерняя тема CSS была загружена, 'ver=<parent-theme-version>была в том, что я следовал Кодексу WP по дочерним темам 1: 1. Мой functions.phpсодержал это:

add_action('wp_enqueue_scripts', 'theme_enqueue_styles');
function theme_enqueue_styles() {
  wp_enqueue_style('parent-style', get_template_directory_uri() . '/style.css');
}

Код, который я использовал, был впервые упомянут в https://wordpress.stackexchange.com/a/182023/30783, но многочисленные сайты в Интернете скопировали его (без должного указания).

// Making sure your child theme has an independent version and can bust caches: https://wordpress.stackexchange.com/a/182023/30783
// Filter get_stylesheet_uri() to return the parent theme's stylesheet
add_filter('stylesheet_uri', 'use_parent_theme_stylesheet');
// Enqueue this theme's scripts and styles (after parent theme)
add_action('wp_enqueue_scripts', 'my_theme_styles', 20);

function use_parent_theme_stylesheet()
{
    // Use the parent theme's stylesheet
    return get_template_directory_uri() . '/style.css';
}

function my_theme_styles()
{
    $themeVersion = wp_get_theme()->get('Version');

    // Enqueue our style.css with our own version
    wp_enqueue_style('child-theme-style', get_stylesheet_directory_uri() . '/style.css',
        array(), $themeVersion);
}

Обновление 2017-01-26

Текущий справочник WP Theme теперь содержит правильное исправление: https://developer.wordpress.org/themes/advanced-topics/child-themes/#3-enqueue-stylesheet

Марсель Стёр
источник
Ницца! Если вы ответили на свой вопрос, можно принять собственный ответ в качестве решения.
phatskat
Я знаю, но вы должны ждать 2d, пока эта функция не станет доступной.
Марсель Стёр
3
Текущий справочник WP Theme теперь содержит правильное исправление: developer.wordpress.org/themes/advanced-topics/child-themes/…
Marcel
1

Это хорошо работает, когда вы добавляете напрямую в header.php и обновляете кеш каждый раз, когда обновляете свой CSS-файл:

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

Он отображает: style.css? 324932684 где число - время, когда файл был отредактирован

jcdarocha
источник
1
Стили следует ставить в очередь wp_enqueue_styleвместо жесткого кодирования.
Бравокейл
0

Это может также работать. Использование функции php rand:

function theme_enqueue_styles() {

    $parent_style = 'parent-style';

    wp_enqueue_style( $parent_style, get_template_directory_uri() . '/style.css' );
    wp_enqueue_style( 'child-style',
        get_stylesheet_directory_uri() . '/style.css?'.rand(),
        array( $parent_style )
    );
}
add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' );
Джошуа Кулман
источник
1
Это не очень хорошая идея, поскольку вы хотите, чтобы эти ресурсы кэшировались браузером до тех пор, пока они не меняются.
Марсель Стёр