因此,由于某种原因,当依赖于查询字符串值时,wp_enqueue_script
不会执行。如果我将函数check
更改为简单地返回 true,它可以工作。这是为什么呢?查看WordPress启动顺序,wp_enqueue_script
在parse_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 );