Ambil URL dari Script / Style dan Dependensi

Aug 16 2020

Diberikan skrip XY dan Z bagaimana saya mendapatkan daftar dalam PHP XYZ dan dependensinya?

Saya perlu memuat beberapa skrip yang memiliki ketergantungan.

Biasanya saya akan melakukan ini melalui wp_enqueue_scripttetapi dalam situasi ini saya perlu memuat skrip ini dalam shadow DOM untuk komponen web, dan tidak dapat mengandalkan wp_headdan wp_footer, saya harus membuat sendiri elemen DOM di JS. Ini agar konten komponen diisolasi dari halaman lainnya untuk tujuan gaya.

Jawaban

2 SallyCJ Aug 16 2020 at 08:05

wp_enqueue_script()dan wp_enqueue_style()keduanya digunakan WP_Dependencies::add()yang menginisialisasi instance baru _WP_Dependency(lihat wp_scripts()dan wp_styles()), sehingga semua dependensi skrip disimpan dalam depsproperti instance kelas.

Namun, properti itu hanya menyimpan nama pegangan dari ketergantungan skrip, misalnya jquery-migratedan jquery-coreuntuk skrip jQuery default / inti (nama pegangan :) jquery, jadi untuk mendapatkan URL sebenarnya dari file ketergantungan (skrip / stylesheet), kita perlu menggunakan WP_Dependencies::all_deps()dan kemudian mengulang WP_Dependencies::$to_dountuk mendapatkan nilai dependensi 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 ...
}

Perhatikan bahwa $dep->srcbisa menjadi falsejika ketergantungan berisi ketergantungan, misalnya jquerypegangan default yang memiliki jquery-migrateketergantungan. (Tapi jangan khawatir, dependensi akan ada di dalam to_doarray.) Dan kedua, to_doarray juga menyertakan file sebenarnya, misalnya file.jsdalam contoh di atas.