检索脚本/样式和依赖项的URL

时间:2020-08-15 作者:Tom J Nowell

Given script X Y and Z how would I get the list in PHP of X Y Z and their dependencies?

我需要加载几个具有依赖关系的脚本。

通常我会通过wp_enqueue_script 但是在这种情况下,我需要将这些脚本加载到Web组件的阴影DOM中,并且不能依赖于wp_headwp_footer, 我必须自己在JS中构造DOM元素。这是为了使组件的内容与页面的其余部分隔离,以便于设计样式。

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

wp_enqueue_script()wp_enqueue_style() 两者都使用WP_Dependencies::add() 初始化的新实例_WP_Dependency (参见wp_scripts()wp_styles()), 因此,所有脚本的依赖项都存储在deps 类实例的属性。

但是,该属性仅存储脚本依赖项的句柄名称,例如。jquery-migratejquery-core 对于默认/核心jQuery脚本(句柄名称:jquery), 因此,要获取依赖项文件(脚本/样式表)的实际URL,我们需要使用WP_Dependencies::all_deps() 然后循环通过WP_Dependencies::$to_do 获取依赖项的src 值:

// Enqueue a script:
wp_enqueue_script( \'my-script\', \'/path/to/file.js\', [ \'jquery\' ] );

// Get all its dependencies:
wp_scripts()->all_deps( \'my-script\' );
foreach ( wp_scripts()->to_do as $handle ) {
    $dep = wp_scripts()->registered[ $handle ];
    var_dump( $dep->handle, $dep->src );
    // or do something with $dep->src ...
}

// Enqueue a style:
wp_enqueue_style( \'my-style\', \'/path/to/file.css\', [ \'foo-dep\' ] );

// Get all its dependencies:
wp_styles()->all_deps( \'my-style\' );
foreach ( wp_styles()->to_do as $handle ) {
    $dep = wp_styles()->registered[ $handle ];
    var_dump( $dep->handle, $dep->src );
    // or do something with $dep->src ...
}
请注意$dep->src 可以是false 如果依赖项包含依赖项,例如默认值jquery 手柄具有jquery-migrate 作为依赖项。(但别担心,依赖项将在to_do 阵列。)其次to_do 数组还包括实际文件,例如。file.js 在上述示例中。