Как обойти кеширование style.css дочерней темы
Мой вопрос может затрагивать несколько аспектов, но по сути он прост: как убедиться, что изменения в файле style.css
дочерней темы правильно распространяются через все уровни кеширования?
Я читал в нескольких источниках, что WordPress должен/может добавлять версию 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 своей дочерней темы, не обновляя при этом WordPress или родительскую тему, как я могу принудительно обновить кеш?

Комментарий @dalbaeb в итоге привел к содержательным обсуждениям и рабочему решению. Большое спасибо!
Я считаю, что причина, по которой CSS моего дочерней темы загружался с параметром 'ver=<parent-theme-version>
, заключалась в том, что я строго следовал документации WP Codex о дочерних темах. В моем 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, но множество сайтов в интернете просто скопировали его (не указывая первоисточник).
// Убеждаемся, что дочерняя тема имеет независимую версию и может сбрасывать кэш: https://wordpress.stackexchange.com/a/182023/30783
// Фильтруем get_stylesheet_uri(), чтобы возвращать таблицу стилей родительской темы
add_filter('stylesheet_uri', 'use_parent_theme_stylesheet');
// Подключаем скрипты и стили этой темы (после родительской темы)
add_action('wp_enqueue_scripts', 'my_theme_styles', 20);
function use_parent_theme_stylesheet()
{
// Используем таблицу стилей родительской темы
return get_template_directory_uri() . '/style.css';
}
function my_theme_styles()
{
$themeVersion = wp_get_theme()->get('Version');
// Подключаем наш style.css с собственной версией
wp_enqueue_style('child-theme-style', get_stylesheet_directory_uri() . '/style.css',
array(), $themeVersion);
}
Обновление от 26.01.2017
Текущее руководство по темам WordPress теперь содержит правильное решение: https://developer.wordpress.org/themes/advanced-topics/child-themes/#3-enqueue-stylesheet

Отлично! Если вы сами ответили на свой вопрос, можно принять свой собственный ответ как решение.

Я знаю, но нужно подождать 2 дня, пока эта функция станет доступна.

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

Это хорошо работает, когда вы добавляете код напрямую в ваш 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, где число — это время последнего изменения файла

Это также может сработать. Используя функцию rand в PHP:
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' ); // Подключение стилей

В WordPress теперь это реализовано с помощью функции.
add_action( 'wp_enqueue_scripts', 'my_theme_enqueue_styles' );
function my_theme_enqueue_styles() {
wp_enqueue_style( 'child-style', get_stylesheet_uri(),
array( 'parenthandle' ),
wp_get_theme()->get('Version') // это работает только если у вас указана Version в заголовке стиля
);
}
Использует Version: 1.0.0
в вашей таблице стилей Подключение таблицы стилей с версией
