Recuperar URL de Script/Estilo e Dependências

Aug 16 2020

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

2 SallyCJ Aug 16 2020 at 08:05

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.