语境
我根据《二十三岁》构建了一个儿童主题,效果很好。在将父主题更新为1.3版之后,我注意到样式的奇怪行为是由缓存的父主题的引起的style.css
。
这是我的孩子主题的内容style.css
(省略标题)
/* =Imports styles from the parent theme
-------------------------------------------------------------- */
@import url('../twentythirteen/style.css');
因此,子主题的style.css
功能只不过是导入父主题的style.css
。
我也有另一个css文件,其中包含我的子主题的自定义设置,如下所示functions.php
:
// Enqueue parent theme's style.css (faster than using @import in our style.css)
$themeVersion = wp_get_theme()->get('Version');
// Enqueue child theme customizations
wp_enqueue_style('child_main', get_stylesheet_directory_uri() . '/css/main.css',
null, $themeVersion);
这给了我一个非常不错的CSS网址,例如:domain.com/wp-content/themes/toutprettoutbon/css/main.css?ver=1.0.1
确保在更新子主题时重新加载样式表。
现在的问题
该语句@import url('../twentythirteen/style.css');
完全独立于基础父主题的版本。实际上,可以在不更新子主题的情况下更新父主题,但是浏览器仍将使用old的缓存版本../twentythirteen/style.css
。
二十三个十三中的相关代码使style.css
:
function twentythirteen_scripts_styles() {
// ...
// Add Genericons font, used in the main stylesheet.
wp_enqueue_style( 'genericons', get_template_directory_uri() . '/genericons/genericons.css', array(), '3.03' );
// Loads our main stylesheet.
wp_enqueue_style( 'twentythirteen-style', get_stylesheet_uri(), array(), '2013-07-18' );
// Note usage of get_stylesheet_uri() which actually enqueues child-theme/style.css
// Loads the Internet Explorer specific stylesheet.
wp_enqueue_style( 'twentythirteen-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentythirteen-style' ), '2013-07-18' );
}
add_action( 'wp_enqueue_scripts', 'twentythirteen_scripts_styles' );
我可以想到一些解决此问题的方法,但没有一种是真正令人满意的:
每次更新父主题以更改其中的版本字符串时,都要更新我的子主题
style.css
(例如@import url('../twentythirteen/style.css?ver=NEW_VERSION');
)。这在父主题版本和子主题之间创建了不必要且烦人的链接。在我孩子的
functions.php
,1)wp_dequeue_style
所包含的子主题的style.css
和2)wp_enqueue_style
的父主题是style.css
直接与版本字符串。这弄乱了父主题中排队的CSS的顺序。使用
style_loader_tag
过滤器修改<link>
为其生成的css 标记,style.css
并修改路径以直接指向父主题的style.css
WITH版本字符串。对于这样的常见需求(高速缓存清除)而言似乎有些晦涩。将父主题的主题转储到
style.css
我的子主题的主题中style.css
。确实与(1)相同,但速度更快。使我的子主题
style.css
成为父主题的符号链接style.css
。这似乎有点骇人听闻...
我错过了什么吗?有什么建议么?
编辑
新增genericicons.css
和ie.css
父主题的样式表来解释,为什么我不能更改@import
CSS语句wp_enqueue_style
在我的子主题。目前,@import
在子主题的声明中style.css
,我在生成的页面中具有以下顺序:
- 23 / genericons / genericons.css->由父主题排队
- child-theme / style.css->由父主题排队,@ imports二十一十三/style.css
- 23 / css / ie.css->由父主题排队
- child-theme / css / main.css->按子主题排队
如果我将父级style.css
作为的依赖项入队main.css
,则它将变为:
- 23 / genericons / genericons.css->由父主题排队
- child-theme / style.css->空,由父主题排队
- 23 / css / ie.css->由父主题排队
- 21.13 / style.css->子主题作为main.css的依赖项入队
- child-theme / css / main.css->按子主题排队
注意,ie.css现在包括在父主题的之前style.css
。我不想更改父主题的css文件的排队顺序,因为我无法假定这不会导致css规则优先级出现问题。
style.css
不会与现在相同。父级包含其他css文件,这些文件必须位于其style.css
和我的子主题的css之间。
@import
,而是将父主题的样式表设置为您自己样式表的依赖项。