根据页面条件对脚本进行排队


Enqueue script based on page condition

我正在尝试弄清楚如何根据插件配置文件中的条件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() ) ,它会将其添加回来。奇怪?

  1. 有没有办法包括条件?
  2. 公共函数部分是否会改变读取条件的方式?
  3. 是否可以从插件的配置文件中删除排队并将其放在我的函数.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 ;