Получить URL-адрес скрипта / стиля и зависимостей

Aug 16 2020

Учитывая скрипт XY и Z, как мне получить список в PHP XYZ и их зависимостей?

Мне нужно загрузить несколько скриптов, у которых есть зависимости.

Обычно я бы делал это через, wp_enqueue_scriptно в этой ситуации мне нужно загрузить эти скрипты в теневой DOM для веб-компонента, и я не могу полагаться на них, wp_headи wp_footerя должен сам создавать элементы DOM в JS. Это сделано для того, чтобы содержимое компонента было изолировано от остальной части страницы для стилизации.

Ответы

2 SallyCJ Aug 16 2020 at 08:05

wp_enqueue_script()и wp_enqueue_style()оба используют, WP_Dependencies::add()который инициализирует новый экземпляр _WP_Dependency(см. wp_scripts()и wp_styles()), поэтому все зависимости скрипта хранятся в depsсвойстве экземпляра класса.

Тем не менее, это свойство сохраняет только ручки имен зависимостей скрипта, например , jquery-migrateи jquery-coreдля сценария по умолчанию / ядро JQuery (имя ручки: jquery), поэтому , чтобы получить фактический URL файла зависимостей (скрипт / стили), мы должны использовать WP_Dependencies::all_deps()а затем выполните цикл, WP_Dependencies::$to_doчтобы получить значение зависимости 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 ...
}

Обратите внимание, что это $dep->srcможет быть a, falseесли зависимость содержит зависимость, например, jqueryдескриптор по умолчанию, который имеет jquery-migrateзависимость. (Но не волнуйтесь, зависимости будут в to_doмассиве.) И, во-вторых, to_doмассив также включает сам файл, например, file.jsв приведенном выше примере.