Recuperar URL de Script/Estilo y Dependencias
Dada la secuencia de comandos XY y Z, ¿cómo obtendría la lista en PHP de XYZ y sus dependencias?
Necesito cargar varios scripts que tienen dependencias.
Normalmente haría esto a través wp_enqueue_script
de, pero en esta situación necesito cargar estos scripts en un DOM oculto para un componente web, y no puedo confiar en wp_head
y wp_footer
, tengo que construir los elementos DOM yo mismo en JS. Esto es para que el contenido del componente se aísle del resto de la página con fines de estilo.
Respuestas
wp_enqueue_script()
y wp_enqueue_style()
ambos usan WP_Dependencies::add()which inicializa una nueva instancia de _WP_Dependency(ver wp_scripts()y wp_styles()), por lo que todas las dependencias del script se almacenan en la deps
propiedad de la instancia de la clase.
Sin embargo, esa propiedad solo almacena los nombres de identificadoresjquery-migrate
de las dependencias del script, por ejemplo, y jquery-core
para el script jQuery predeterminado/principal (nombre del identificador:) jquery
, por lo que para obtener la URL real de un archivo de dependencia (script/hoja de estilo), tendríamos que usar WP_Dependencies::all_deps()y luego recorrer WP_Dependencies::$to_do
para obtener el valor de la dependencia 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 ...
}
Tenga en cuenta que $dep->src
puede ser un false
si la dependenciajquery
contiene una dependencia, por ejemplo, el identificador predeterminado que tiene jquery-migrate
como dependencia. (Pero no se preocupe, las dependencias estarán en la to_do
matriz). Y en segundo lugar, la to_do
matriz también incluye el archivo real, por ejemplo, file.js
en el ejemplo anterior.