我发布了一个插件,该插件创建了一个短代码,并要求在包含该短代码的任何页面上加载一个JavaScript文件和一个CSS文件。我可以在所有页面上加载脚本/样式,但这不是最佳做法。我只想在调用短代码的页面上加载文件。我找到了两种方法,但都有问题。
Method 1 在shortcode处理程序函数内将标志设置为true,然后在wp_footer
回调。如果这是真的,它使用wp_print_scripts()
加载JavaScript。问题是它只适用于JavaScript,而不适用于CSS,因为CSS应该在内部声明<head>
, 你只能在像init
或wp_head
.
Method 2 提前触发并“向前看”,以查看当前页面内容中是否存在短代码。我比第一种方法更喜欢这个方法,但它的问题是无法检测模板是否调用do_shortcode()
.
因此,我倾向于使用第二种方法,然后尝试检测是否分配了模板,如果是,则分析它的短代码。在我这么做之前,我想看看是否有人知道更好的方法。
Update: 我已经将解决方案集成到我的插件中。如果有人想在生活环境中看到它的丰满,你可以download it 或browse it.
Update 2: 从WordPress 3.3开始,现在可以call wp_enqueue_script()
directly inside a shortcode callback, JavaScript文件将在文档的页脚中调用。这在技术上也适用于CSS文件,但应被视为一种不好的做法,因为在<head>
标记违反了W3C规范,可以使用FOUC大小写,并且可能会强制浏览器重新呈现页面。