我正在尝试弄清楚如何根据插件配置文件中的条件is_page()对文件(javascript和样式)进行排队。一周来,我一直在试图从我在网上找到的无数中找到一个可行的解决方案。
这是文件的原件:
public function enqueue_files() {
wp_enqueue_script("jquery");
wp_enqueue_style("wpsqt-main",plugins_url('/css/main.css',WPSQT_FILE));
}
这是我尝试的:
public function enqueue_files() {
if ( is_page(xxx) ) {
wp_enqueue_script("jquery");
wp_enqueue_style("wpsqt-main",plugins_url('/css/main.css',WPSQT_FILE));
}
}
当我测试if ( is_page() )
时,它会从所有页面的标题中删除脚本和样式。但是,当将其更改为: if ( !is_page() )
,它会将其添加回来。奇怪?
- 有没有办法包括条件?
- 公共函数部分是否会改变读取条件的方式?
- 是否可以从插件的配置文件中删除排队并将其放在我的函数.php文件中,以便每当插件更新时,我就不必进行更改?
这是文件(将文件排队的调用位于最底部): http://pastebin.com/sDt4sTCH
我包含了实际文件,以便您可以获得使用它的上下文。提前感谢!!编辑更好的代码格式
您在查询之前调用 is_page() 太早了,因此没有可用于测试的$post。如果(不是 is_page())在这种情况下将始终为真。我规避这种情况的方法是将脚本插入页脚而不是页眉(在有查询之后)。请注意,您需要在网站页脚中包含<?php wp_footer() ?>
,通常在</body>
之前
class MyPlugin {
//In the constructor we want to set a few methods as action callbacks
public function __construct () {
add_action('init', array(&$this, 'register_my_scripts'));
add_action('wp_print_footer_scripts', array(&$this, 'print_my_scripts'));
}
//This method is called by init, and registers our plugin scripts for later use
public function register_my_scripts () {
wp_enqueue_style("wpsqt-main",plugins_url('/css/main.css',WPSQT_FILE));
}
//This method is called by wp_print_footer_scripts, and prints our <script> through wp_footer()
public function print_my_scripts () {
//Only render the script on specific pages
if ( is_page(xxx) ) {
wp_print_scripts("wpsqt-main", array('jquery'));
}
}
}
或者,您可以使用全局变量,只需在要打印脚本的任何位置将其设置为 true。例如,如果您不知道页面名称。只需将上面的print_my_scripts方法替换为此方法即可。
public function print_my_scripts () {
global $print_my_script;
//Only render the script on pages which have asked for it
if ($print_my_script) {
wp_print_scripts("wpsqt-main", array('jquery'));
}
}
并将其添加到任何简码,小部件,页面模板中......任何告诉我们的脚本使用简码,小部件,模板等在页面上打印的内容。
global $print_my_script ;
$print_my_script = true ;