问题描述

我使用 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() 中似乎没有工作。

欢呼,格雷戈里

最佳解决方案

只是在这个问题上,这个问题可能是边界过于本地化的,因为它是专门针对酿酒学主题的。

也就是说,这里是我认为你有问题的地方:酿酒学排列了两种样式表:

  1. style.css,直接在文件头 (因此在 wp_head()被烧)

  2. {varietal}.csswp_enqueue_scripts,优先 11functions/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 问题:

为了覆盖父主题样式表入库,您需要知道两件事情:

  1. 样式表排入队列的动作钩子

  2. 将回调添加到挂钩的优先级

可以在 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_scriptswp_print_styleswp_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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。