使用wp_add_inline_style添加定制器样式

时间:2016-11-11 作者:cjbj

作为我told in an earlier question 有一个包含数百个mod的主题,我将其收集在一个mod中,这样我就不必在每次页面加载时遍历所有mod。

现在codex has you dump customizer styles 直接击中头部,这不是很优雅。有wp_add_inline_style 以有序的方式将css添加到现有样式表中。这看起来像这样,效果很好:

$style = get_theme_mod (\'all-mods\');
wp_add_inline_style (\'my-main-style\',$style);
然而,有一个问题。如果我构建一个子主题,内联样式仍然直接添加在父样式之后。这会导致它们被子主题css覆盖,子主题css加载在父主题css之后,以确保覆盖这些样式。这不是用户所期望的。

自定义样式应该具有最高的优先级,因此在某种程度上,我必须确保它们是最后加载到头部的样式。我可以检测到是否有child theme active, 但无法知道子样式的句柄以向其添加内联样式。

此时,我只定义了一个空的css文件,我将其列在头部的末尾,然后添加内联样式。但这远远不够优雅,这就是为什么我首先要走这条路。有人知道更聪明的方法吗?

1 个回复
SO网友:koMah

您可以尝试检测当前使用的主题是否为子主题,如果是,请将内联CSS指向正确的样式。我没有测试这个解决方案,但这可能是一个很好的起点。

function mytheme_enqueue_style()
{
    wp_enqueue_style( \'parent-theme-style\',get_template_directory_uri() . \'/style.css\', false );

    if(is_child_theme())
    {
        wp_enqueue_style( \'child-theme-style\', get_stylesheet_directory_uri() . \'/style.css\', array(\'parent-theme-style\')  );
    }

    $style = get_theme_mod (\'all-mods\');
    $where = is_child_theme() ? \'child-theme-style\' : \'parent-theme-style\';
    wp_add_inline_style( $where, $style );
}

add_action( \'wp_enqueue_scripts\', \'mytheme_enqueue_style\' );
get_template_directory_uri()get_stylesheet_directory_uri() 事实上on codex 我们有

如果正在使用子主题,此函数将返回子主题目录URI。使用get_template_directory_uri() 避免被子主题覆盖。

相关推荐