高级:了解wp_add_inline_style函数

时间:2017-03-03 作者:nicmare

我读了很多关于添加动态内联样式表的文章。但这个让我抓狂。我有一个简单的dev设置。这是我的全球风格:

function bootstrap_scripts_styles() {
    wp_enqueue_style( \'custom-style\', get_stylesheet_directory_uri().\'/style.css\', array(), \'2016-07-18\' );
}
add_action( \'wp_enqueue_scripts\', \'bootstrap_scripts_styles\' );
因为我需要从single触发自定义样式。php,我在这里添加了一些示例代码:

$custom_css = ".intro { background: red; }";
wp_add_inline_style( \'custom-style\', $custom_css );
使用这个,什么都不会发生。我在前端代码中没有看到任何内联样式。但是,当我调试WP\\u Styles()并查找可以看到的“自定义样式”时,会附加样式:

[custom-style] => _WP_Dependency Object
                (
                    [handle] => custom-style
                    [src] => http://localhost/westerland/wp-content/themes/westerland/style.css
                    [deps] => Array
                        (
                        )

                    [ver] => 2013-07-18
                    [args] => all
                    [extra] => Array
                        (
                            [after] => Array
                                (
                                    [0] => .intro { background: red; }
                                )

                        )

                )
所以我想知道为什么它没有被打印出来?!我找到了打印它的方法,但后来,它被打印了出来<body> 而是在<link> 全局样式标记:

$custom_css = ".intro { background: red; }";
wp_add_inline_style( \'custom-style\', $custom_css );
WP_Styles()->print_inline_style("custom-style");
所以这感觉有点“黑”,因为我希望它尽可能干净地出现在<head> 标签这是某种bug吗?我正在使用最新的WP。

2 个回复
最合适的回答,由SO网友:Svartbaard 整理而成

检查以下各项是否适用。如果您希望在单个自定义post类型模板上实现这一点,只需将is\\u single()改为is\\u single(\'custom-post-type\')。希望这有帮助。

function bootstrap_scripts_styles() {
  wp_enqueue_style(\'custom-style\',get_template_directory_uri() . \'/bootstrap.css\');
  $custom_css = ".intro { background: red; }";
  wp_add_inline_style( \'custom-style\', $custom_css );
}


function enqueue_inline_style( $query ) {
    if ( $query->is_single()) {
        add_action( \'wp_enqueue_scripts\', \'bootstrap_scripts_styles\' );
    }
}

add_action( \'pre_get_posts\', \'enqueue_inline_style\' );
编辑:显然,只需将主样式表单独排队即可。

SO网友:nicmare

谢谢Svartbaart。你的回答引导我走向正确的方向。所以我的方法的主要问题是我在单曲中运行它。php,它不会执行内联样式的打印。所以我所做的就是把它插入函数中。php在其自己的函数中,该函数由wp\\u enqueue\\u脚本挂钩触发。最终代码如下:

function inline_style() {
    global $post;
    if(is_single()) {
            $custom_css = ".intro { background:red }";
            wp_add_inline_style(\'custom-style\', $custom_css);
    }
}
add_action( \'wp_enqueue_scripts\', \'inline_style\' );

相关推荐

在带有PHP的子主题中包含style.css

在里面https://codex.wordpress.org/Child_Themes 这是包含样式的最佳实践。css在子主题中,必须将下面的代码放入函数中。php的子主题,但将“父样式”替换为可以在函数中找到的父主题的参数。父主题的php。我在我的主题文件中找不到它,那里也没有多少代码。使用@import包含父主题样式表的方法不适用于我,放入文件的css不会在任何浏览器的站点上显示自己。function my_theme_enqueue_styles() { $parent_s