Recuperar URL de Script/Estilo y Dependencias

Aug 16 2020

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

2 SallyCJ Aug 16 2020 at 08:05

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.