Récupérer l'URL du script/style et des dépendances

Aug 16 2020

É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_headand 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

2 SallyCJ Aug 16 2020 at 08:05

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 depsproprié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-migrateet jquery-corepour 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_dopour obtenir la srcvaleur 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->srcpeut être a falsesi la dépendance contient une dépendance, par exemple le jqueryhandle par défaut qui a jquery-migratecomme dépendance. (Mais ne vous inquiétez pas, les dépendances seront dans le to_dotableau.) Et deuxièmement, le to_dotableau inclut également le fichier réel, par exemple file.jsdans l'exemple ci-dessus.