Récupérer l'URL du script/style et des dépendances
Étant donné le script XY et Z, comment puis-je obtenir la liste en PHP de XYZ et de leurs dépendances ?
J'ai besoin de charger plusieurs scripts qui ont des dépendances.
Normalement, je le ferais via wp_enqueue_script
, mais dans cette situation, je dois charger ces scripts dans un DOM fantôme pour un composant Web, et je ne peux pas compter sur wp_head
and wp_footer
, je dois construire moi-même les éléments DOM dans JS. Cela permet d'isoler le contenu du composant du reste de la page à des fins de style.
Réponses
wp_enqueue_script()
et wp_enqueue_style()
les deux utilisent WP_Dependencies::add()qui initialise une nouvelle instance de _WP_Dependency(voir wp_scripts()et wp_styles()), de sorte que toutes les dépendances du script sont stockées dans la deps
propriété de l'instance de classe.
Cependant, cette propriété ne stocke que les noms de descripteur des dépendances du script, par exemple jquery-migrate
et jquery-core
pour le script jQuery par défaut/core (nom de descripteur : jquery
), donc pour obtenir l'URL réelle d'un fichier de dépendance (script/feuille de style), nous aurions besoin d'utiliser WP_Dependencies::all_deps()puis bouclez WP_Dependencies::$to_do
pour obtenir la src
valeur de la dépendance :
// 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 ...
}
Notez que $dep->src
peut être a false
si la dépendance contient une dépendance, par exemple le jquery
handle par défaut qui a jquery-migrate
comme dépendance. (Mais ne vous inquiétez pas, les dépendances seront dans le to_do
tableau.) Et deuxièmement, le to_do
tableau inclut également le fichier réel, par exemple file.js
dans l'exemple ci-dessus.