问题描述
我使用 Chip Bennett 的 well-written 酿酒学主题作为我自己的儿童主题的父母。
在我的开发过程中,我发现有人在编写 「儿童」 主题时遇到了一些挑战。
我刚刚发现我的主要 style.css 文件在< head> 之前的每个其他样式表链接或语句之前被加载,这就解释了为什么我无法覆盖一些父样式。
进一步研究问题表明,各种父样式表和样式可以在< head> 在三个地方 add_action('wp_print_styles',
,add_action('wp_enqueue_scripts',
,然后 add_action('wp_head',
。
为了保持简单,我打算创建两个样式表。第一个主要的’style.css’ 表将只包含加载 Oenology 主要样式表所需的 @import url()
命令。
第二个样式表将包含我的子规则。要确保它在所有其他规则之后加载,我将使用 add_action( 'wp_head',
排队。
这听起来很合理吗?还是有更好的 (更正确的) 方法呢?
btw,有谁知道 「/parent-theme/style.css?MRPreviewRefresh = 723」 是什么意思?
Update
wp_enqueue_style() 在 wp_head() 中似乎没有工作。
欢呼,格雷戈里
最佳解决方案
只是在这个问题上,这个问题可能是边界过于本地化的,因为它是专门针对酿酒学主题的。
也就是说,这里是我认为你有问题的地方:酿酒学排列了两种样式表:
-
style.css
,直接在文件头 (因此在wp_head()
被烧) -
{varietal}.css
,wp_enqueue_scripts
,优先11
,functions/dynamic-css.php
:/** * Enqueue Varietal Stylesheet */ function oenology_enqueue_varietal_style() { // define varietal stylesheet global $oenology_options; $oenology_options = oenology_get_options(); $varietal_handle = 'oenology_' . $oenology_options['varietal'] . '_stylesheet'; $varietal_stylesheet = get_template_directory_uri() . '/varietals/' . $oenology_options['varietal'] . '.css'; wp_enqueue_style( $varietal_handle, $varietal_stylesheet ); } // Enqueue Varietal Stylesheet at wp_print_styles add_action('wp_enqueue_scripts', 'oenology_enqueue_varietal_style', 11 );
应用”skin” 的品种样式表以优先级 11
进行排队,以确保首先加载基本样式表 style.css
,然后加载多样式样式表,以便导致正确的级联。
所以,如果你需要覆盖多样的样式表,只需要在多样化样式表之后排列你的第二个样式表; 即具有至少 12
或更高的优先权。
Edit
要提供一个 more-general 答案,more-general 问题:
为了覆盖父主题样式表入库,您需要知道两件事情:
-
样式表排入队列的动作钩子
-
将回调添加到挂钩的优先级
可以在 init
钩子和 wp_print_scripts
/wp_print_styles
钩子之间的任何位置正确执行排队功能 (wp_enqueue_script()
/wp_enqueue_style()
) 。 (执行 wp_enqueue_*()
功能的语义正确的钩子目前是 wp_enqueue_scripts
) 。 This list includes the following actions(其中,这些只是通常的嫌疑人):
-
init
-
wp_head
-
wp_enqueue_scripts
-
wp_print_scripts
/wp_print_styles
(请注意,wp_enqueue_scripts
,wp_print_styles
和 wp_print_scripts
都在 wp_head
内部全部起火,具体优先。
因此,为了覆盖 Parent-Theme 样式表,您需要执行以下操作之一:
-
De-enqueue Parent-Theme 样式表,通过
wp_dequeue_style( $handle )
-
删除通过
remove_action( $hook, $callback )
排列样式的父主题回调 -
使用 CSS 级联来覆盖 Parent-Theme 样式表,通过将您的 Child-Theme 样式表
wp_enqueue_style()
调用挂钩到具有较低优先级的相同钩子或稍后的钩子中。对于最后一个选项,如果父主题使用:
`add_action( 'wp_enqueue_scripts', 'parent_theme_enqueue_style', $priority )`
… 然后儿童主题将使用:
`add_action( 'wp_enqueue_scripts', 'child_theme_enqueue_style', {$priority + 1} )`
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。