Получить URL-адрес скрипта / стиля и зависимостей
Учитывая скрипт XY и Z, как мне получить список в PHP XYZ и их зависимостей?
Мне нужно загрузить несколько скриптов, у которых есть зависимости.
Обычно я бы делал это через, wp_enqueue_script
но в этой ситуации мне нужно загрузить эти скрипты в теневой DOM для веб-компонента, и я не могу полагаться на них, wp_head
и wp_footer
я должен сам создавать элементы DOM в JS. Это сделано для того, чтобы содержимое компонента было изолировано от остальной части страницы для стилизации.
Ответы
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
в приведенном выше примере.