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_scriptde, pero en esta situación necesito cargar estos scripts en un DOM oculto para un componente web, y no puedo confiar en wp_heady 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 depspropiedad 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-corepara 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_dopara 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->srcpuede ser un falsesi la dependenciajquery contiene una dependencia, por ejemplo, el identificador predeterminado que tiene jquery-migratecomo dependencia. (Pero no se preocupe, las dependencias estarán en la to_domatriz). Y en segundo lugar, la to_domatriz también incluye el archivo real, por ejemplo, file.jsen el ejemplo anterior.