Recupera URL di script/stile e dipendenze
Dati gli script XY e Z come ottengo l'elenco in PHP di XYZ e le loro dipendenze?
Ho bisogno di caricare diversi script che hanno dipendenze.
Normalmente lo farei tramite, wp_enqueue_script
ma in questa situazione ho bisogno di caricare questi script in uno shadow DOM per un componente web e non posso fare affidamento su wp_head
e wp_footer
, devo costruire io stesso gli elementi DOM in JS. In questo modo i contenuti del componente sono isolati dal resto della pagina per motivi di stile.
Risposte
wp_enqueue_script()
ed wp_enqueue_style()
entrambi usano WP_Dependencies::add()which inizializza una nuova istanza di _WP_Dependency(vedi wp_scripts()e wp_styles()), quindi tutte le dipendenze dello script sono memorizzate nella deps
proprietà dell'istanza della classe.
Tuttavia, quella proprietà memorizza solo i nomi degli handlejquery-migrate
delle dipendenze dello script, ad esempio e jquery-core
per lo script jQuery predefinito/core (nome dell'handle: jquery
), quindi per ottenere l'URL effettivo di un file delle dipendenze (script/foglio di stile), dovremmo usare WP_Dependencies::all_deps()e quindi eseguire il ciclo WP_Dependencies::$to_do
per ottenere il src
valore della dipendenza:
// 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 ...
}
Si noti che $dep->src
può essere a false
se la dipendenzajquery
contiene una dipendenza, ad esempio l' handle predefinito che ha jquery-migrate
come dipendenza. (Ma non preoccuparti, le dipendenze saranno to_do
nell'array.) E in secondo luogo, l' to_do
array include anche il file effettivo, ad esempio file.js
nell'esempio precedente.