URL von Skript/Stil und Abhängigkeiten abrufen

Aug 16 2020

Wie würde ich bei gegebenem Skript XY und Z die Liste von XYZ und ihren Abhängigkeiten in PHP erhalten?

Ich muss mehrere Skripte laden, die Abhängigkeiten haben.

Normalerweise würde ich dies über tun, wp_enqueue_scriptaber in dieser Situation muss ich diese Skripte in einem Schatten-DOM für eine Webkomponente laden und kann mich nicht auf wp_headund verlassen wp_footer, ich muss die DOM-Elemente selbst in JS erstellen. Dadurch wird der Inhalt der Komponente zu Gestaltungszwecken vom Rest der Seite isoliert.

Antworten

2 SallyCJ Aug 16 2020 at 08:05

wp_enqueue_script()und wp_enqueue_style()beide verwenden WP_Dependencies::add()which initialisiert eine neue Instanz von _WP_Dependency(siehe wp_scripts()und ), sodass alle Abhängigkeiten des Skripts in der Eigenschaft der Klasseninstanz wp_styles()gespeichert werden.deps

Diese Eigenschaft speichert jedoch nur die Handle -Namen der Abhängigkeiten des Skripts, z. B. jquery-migrateund jquery-corefür das Standard-/Kern-jQuery-Skript (Handle-Name: jquery), also müssten wir verwenden, um die tatsächliche URL einer Abhängigkeitsdatei (Skript/Stylesheet) zu erhalten WP_Dependencies::all_deps()und dann durchlaufen , um den Wert WP_Dependencies::$to_doder Abhängigkeit zu erhalten :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 ...
}

Beachten Sie, dass das $dep->srcein sein kann, falsewenn die Abhängigkeit eine Abhängigkeit enthält, z. B. das Standard- jqueryHandle, das jquery-migrateeine Abhängigkeit hat. (Aber keine Sorge, die Abhängigkeiten befinden sich im to_doArray.) Und zweitens enthält das to_doArray auch die eigentliche Datei, zB file.jsim obigen Beispiel.