Recuperar URL de Script/Estilo e Dependências
Dado o script XY e Z, como eu obteria a lista em PHP de XYZ e suas dependências?
Preciso carregar vários scripts que possuem dependências.
Normalmente eu faria isso via wp_enqueue_script, mas nesta situação eu preciso carregar esses scripts em um shadow DOM para um webcomponent, e não posso confiar em wp_heade wp_footer, eu mesmo tenho que construir os elementos DOM em JS. Isso ocorre para que o conteúdo do componente seja isolado do restante da página para fins de estilo.
Respostas
wp_enqueue_script()e wp_enqueue_style()ambos usam o WP_Dependencies::add()que inicializa uma nova instância de _WP_Dependency(consulte wp_scripts()e wp_styles()), portanto, todas as dependências do script são armazenadas na depspropriedade da instância da classe.
No entanto, essa propriedade armazena apenas os nomes de identificador das dependências do script, por exemplo, jquery-migratee jquery-corepara o script jQuery padrão/principal (nome do identificador: jquery), portanto, para obter a URL real de um arquivo de dependência (script/folha de estilo), precisaríamos usar WP_Dependencies::all_deps()e, em seguida, faça um loop WP_Dependencies::$to_dopara obter o valor da dependência 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 ...
}
Observe que $dep->srcpode ser a falsese a dependênciajquery contiver uma dependência, por exemplo, o identificador padrão que possui jquery-migrateuma dependência. (Mas não se preocupe, as dependências estarão no to_doarray.) E em segundo lugar, o to_doarray também inclui o arquivo real, por exemplo, file.jsno exemplo acima.