wp_enqueue_script依赖于自定义模板中的查询字符串值时不起作用


wp_enqueue_script not working when dependent on query string value in custom template.

因此,由于某种原因,当依赖于查询字符串值时,wp_enqueue_script不会执行。如果我将函数check更改为简单地返回 true,它可以工作。这是为什么呢?查看WordPress启动顺序,wp_enqueue_scriptparse_query后触发,这意味着它必须可用。我的目标是仅在请求模板foo时加载脚本。

class Car {
    public function __construct() {
        if ( $this->check() ) {
         add_action('template_include', array( $this, 'get_template') );
         // Does not work
         add_action( 'wp_enqueue_scripts', array( $this, 'get_scripts') );
         add_action( 'wp_enqueue_scripts', array( $this, 'get_styles') );
        }
        // Works
        add_action( 'wp_enqueue_scripts', array( $this, 'get_scripts') );
        add_action( 'wp_enqueue_scripts', array( $this, 'get_styles') );

    }
    public function check() {
        return ( isset( $_GET['foo'] ) && $_GET['foo'] == true );
    }
    public function get_template() {
        return locate_template( array( 'foo.php' ) );
    }

}
$car = new Car();

我怀疑它忽略了你的"foo"参数,因为要使用自定义查询变量,它们需要使用"query_vars"过滤器向WordPress注册。

喜欢这个:

function themeslug_query_vars( $qvars ) {
   $qvars[] = 'foo';
   return $qvars;
}
add_filter( 'query_vars', 'themeslug_query_vars' , 10, 1 );