Recupera URL di script/stile e dipendenze

Aug 16 2020

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_scriptma in questa situazione ho bisogno di caricare questi script in uno shadow DOM per un componente web e non posso fare affidamento su wp_heade 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

2 SallyCJ Aug 16 2020 at 08:05

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 depsproprietà dell'istanza della classe.

Tuttavia, quella proprietà memorizza solo i nomi degli handlejquery-migrate delle dipendenze dello script, ad esempio e jquery-coreper 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_doper ottenere il srcvalore 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->srcpuò essere a falsese la dipendenzajquery contiene una dipendenza, ad esempio l' handle predefinito che ha jquery-migratecome dipendenza. (Ma non preoccuparti, le dipendenze saranno to_donell'array.) E in secondo luogo, l' to_doarray include anche il file effettivo, ad esempio file.jsnell'esempio precedente.