在运行快捷码时将样式标签追加到标题中

时间:2019-02-25 作者:Toniq

我有一个带有短代码的插件。Shortcode在页面中返回一些html。我将有一些动态生成的css,我想在页面中放置。我尝试使用wp\\u add\\u inline\\u样式(挂钩到使用wp\\u enqueue\\u样式添加的主css文件),但在这种情况下我仍然可以看到FOUC。我想要一个像这样的替代方案,以回应一些动态风格的头部。这很好(我在头部使用css获得样式),但是,我也在我的短代码输出中显示了这个脚本标记,以及短代码返回的html。我怎么能在我的短代码输出中不显示这个脚本标记?

简化示例:

add_shortcode(\'foo\', \'add_player\');
function add_player($atts){

   $css = ".a{color:red;}";

   ?>
    <script>
        var css = "<?php echo ($css); ?>";
        var div = document.createElement(\'div\');
        div.innerHTML = "<style>" + css + \'</style>\';
        document.getElementsByTagName(\'head\')[0].appendChild(div.childNodes[0]);
    </script>
   <?php


   return "<div class=\'a\'></div>";

}

1 个回复
最合适的回答,由SO网友:Qaisar Feroz 整理而成

我还将这个脚本标记显示在我的短代码输出中,与短代码返回的html一起显示。我怎么能在我的短代码输出中不显示这个脚本标记。

从不使用echo 短代码中的语句。短代码应该只返回要在前端显示的内容。根据WordPress Codex :

请注意,由shortcode调用的函数不应产生任何类型的输出。短代码函数应返回用于替换短代码的文本。直接生成输出将导致意外的结果。这类似于过滤器函数的行为方式,因为它们不应该在调用中产生预期的副作用,因为您无法控制从何时何地调用它们。

因此,请将代码修改为:

add_shortcode(\'foo\', \'add_player\');

function add_player($atts){

   $css = ".a{color:red;}";

    $o = \'<script>
        var css = "\'.$css\'.";
        var div = document.createElement("div");
        div.innerHTML = "<style>" + css + "</style>";
        document.getElementsByTagName("head")[0].appendChild(div.childNodes[0]);
    </script>\';

   return $o."<div class=\'a\'></div>";

}
或者,您可以使用ob_start()ob_get_clean() 具体如下:

add_shortcode(\'foo\', \'add_player\');
function add_player($atts){

   $css = ".a{color:red;}";
   ob_start();
   ?>
    <script>
        var css = "<?php echo $css; ?>";
        var div = document.createElement(\'div\');
        div.innerHTML = "<style>" + css + \'</style>\';
        document.getElementsByTagName(\'head\')[0].appendChild(div.childNodes[0]);
    </script>
   <?php

   $o = ob_get_clean();
   return $o. "<div class=\'a\'></div>";

}
访问Wordpress Codex 有关详细信息<我希望这有帮助。

相关推荐

WooCommerce国家/地区下拉颜色css

我一直在尝试在我正在开发的一个网站的结帐页上的国家下拉列表中更改所选和悬停国家的颜色,该网站是http://chi-medics.com/无论我在Google Chrome开发工具中尝试什么,我似乎都找不到控制这些元素颜色的CSS。要了解我的意思,请转到网页并向篮子中添加一些内容。然后去收银台。这是“Country”(国家)下拉列表,其中悬停颜色为蓝色,所选颜色为灰色。我想改变这一点,但我一生都想不出来。非常感谢您的帮助。谢谢