Pobierz adres URL skryptu / stylu i zależności
Biorąc pod uwagę skrypt XY i Z, jak mogę uzyskać listę w PHP XYZ i ich zależności?
Muszę załadować kilka skryptów, które mają zależności.
Normalnie wp_enqueue_script
robiłbym to przez, ale w tej sytuacji muszę załadować te skrypty w shadow DOM dla komponentu webowego i nie mogę na nim polegać, wp_head
i wp_footer
muszę sam konstruować elementy DOM w JS. Dzieje się tak, aby zawartość komponentu była odizolowana od reszty strony ze względu na stylizację.
Odpowiedzi
wp_enqueue_script()
i wp_enqueue_style()
oba używają, WP_Dependencies::add()które inicjują nową instancję _WP_Dependency(zobacz wp_scripts()i wp_styles()), więc wszystkie zależności skryptu są przechowywane we deps
właściwości instancji klasy.
Jednak ta właściwość przechowuje tylko nazwy uchwytów zależności skryptu, np. jquery-migrate
I jquery-core
dla domyślnego / core skryptu jQuery (nazwa uchwytu:) jquery
, więc aby uzyskać rzeczywisty adres URL pliku zależności (skrypt / arkusz stylów), musielibyśmy użyć WP_Dependencies::all_deps()a następnie przejdź do pętli, WP_Dependencies::$to_do
aby uzyskać wartość zależności 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 ...
}
Zauważ, że $dep->src
może to być a, false
jeśli zależność zawiera zależność, np. Domyślny jquery
uchwyt, który ma jquery-migrate
jako zależność. (Ale nie martw się, zależności będą w to_do
tablicy.) Po drugie, to_do
tablica zawiera również rzeczywisty plik, np. file.js
W powyższym przykładzie.