Truy xuất URL của Tập lệnh / Kiểu và Sự phụ thuộc

Aug 16 2020

Với script XY và Z, làm cách nào để lấy danh sách trong PHP của XYZ và các phụ thuộc của chúng?

Tôi cần tải một số tập lệnh có phụ thuộc.

Thông thường tôi sẽ làm điều này thông qua wp_enqueue_scriptnhưng trong tình huống này, tôi cần tải các tập lệnh này trong DOM bóng cho một thành phần web và không thể dựa vào wp_headwp_footer, tôi phải tự tạo các phần tử DOM trong JS. Điều này là để nội dung của thành phần được tách biệt với phần còn lại của trang cho mục đích tạo kiểu.

Trả lời

2 SallyCJ Aug 16 2020 at 08:05

wp_enqueue_script()wp_enqueue_style()cả hai đều sử dụng WP_Dependencies::add()để khởi tạo một thể hiện mới của _WP_Dependency(xem wp_scripts()và wp_styles()), vì vậy tất cả các phụ thuộc của tập lệnh được lưu trữ trong thuộc depstính của thể hiện lớp.

Tuy nhiên, thuộc tính đó chỉ lưu trữ tên xử lý của các phần phụ thuộc của tập lệnh, ví dụ: jquery-migratejquery-corecho tập lệnh jQuery mặc định / lõi (tên xử lý jquery:), vì vậy, để lấy URL thực của tệp phụ thuộc (tập lệnh / biểu định kiểu), chúng ta sẽ cần sử dụng WP_Dependencies::all_deps()và sau đó lặp WP_Dependencies::$to_dolại để nhận srcgiá trị của phụ thuộc :

// 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 ...
}

Lưu ý rằng $dep->srccó thể là a falsenếu phần phụ thuộc chứa một phụ thuộc, ví dụ: jqueryxử lý mặc định có jquery-migratenhư một phụ thuộc. (Nhưng đừng lo lắng, các phụ thuộc sẽ nằm trong to_domảng.) Và thứ hai, to_domảng cũng bao gồm tệp thực, ví dụ như file.jstrong ví dụ trên.