Pobierz adres URL skryptu / stylu i zależności

Aug 16 2020

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_scriptrobił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_headi wp_footermuszę sam konstruować elementy DOM w JS. Dzieje się tak, aby zawartość komponentu była odizolowana od reszty strony ze względu na stylizację.

Odpowiedzi

2 SallyCJ Aug 16 2020 at 08:05

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 depswłaściwości instancji klasy.

Jednak ta właściwość przechowuje tylko nazwy uchwytów zależności skryptu, np. jquery-migrateI jquery-coredla 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_doaby 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->srcmoże to być a, falsejeśli zależność zawiera zależność, np. Domyślny jqueryuchwyt, który ma jquery-migratejako zależność. (Ale nie martw się, zależności będą w to_dotablicy.) Po drugie, to_dotablica zawiera również rzeczywisty plik, np. file.jsW powyższym przykładzie.