Estoy creando un complemento y quiero obtener la lista de todos los scripts y CSS utilizados por otros complementos.
Esta es mi función:
function crunchify_print_scripts_styles() {
$result = [];
$result['scripts'] = [];
$result['styles'] = [];
// Print all loaded Scripts
global $wp_scripts;
foreach( $wp_scripts->queue as $script ) :
$result['scripts'][] = $wp_scripts->registered[$script]->src . ";";
endforeach;
// Print all loaded Styles (CSS)
global $wp_styles;
foreach( $wp_styles->queue as $style ) :
$result['styles'][] = $wp_styles->registered[$style]->src . ";";
endforeach;
return $result;
}
add_action( 'wp_enqueue_scripts', 'crunchify_print_scripts_styles');
Quiero obtener el valor devuelto dentro de una variable.
Intenté esto:
$toto = do_action( 'crunchify_print_scripts_styles' );
var_dump( $toto );
Y este es mi resultado:
NULL
Si escribo echo
dentro de cada foreach
ciclo, obtengo los resultados correctos, pero ¿cómo almacenar estos valores dentro de una variable?
[editar]
Mi código dentro de un plugin que tampoco funciona
/**
* Get all scripts and styles from Wordpress
*/
function print_scripts_styles() {
$result = [];
$result['scripts'] = [];
$result['styles'] = [];
// Print all loaded Scripts
global $wp_scripts;
foreach( $wp_scripts->queue as $script ) :
$result['scripts'][] = $wp_scripts->registered[$script]->src . ";";
endforeach;
// Print all loaded Styles (CSS)
global $wp_styles;
foreach( $wp_styles->queue as $style ) :
$result['styles'][] = $wp_styles->registered[$style]->src . ";";
endforeach;
return $result;
}
add_action( 'wp_head', 'wp_rest_assets_init');
/**
* Init JSON REST API Assets routes.
*
* @since 1.0.0
*/
function wp_rest_assets_init() {
$all_the_scripts_and_styles = print_scripts_styles();
if ( ! defined( 'JSON_API_VERSION' ) &&
! in_array( 'json-rest-api/plugin.php', get_option( 'active_plugins' ) ) ) {
$class = new WP_REST_Assets();
$class::$scriptsAndStyles = $all_the_scripts_and_styles;
add_filter( 'rest_api_init', array( $class, 'register_routes' ) );
} else {
$class = new WP_JSON_Menus();
add_filter( 'json_endpoints', array( $class, 'register_routes' ) );
}
}
add_action( 'init', 'wp_rest_assets_init' );
wp-enqueue-script
wp-enqueue-style
scripts
css
Edouard Kombo
fuente
fuente
do_action
no devuelve un resultado, y además, la acción ya ha tenido lugar enwp_enqueue_scripts
... más fácil simplemente para crear un global, por ejemplo.global $crunchifyenqueued; $crunchifyenqueued = $result;
luego vuelva a llamar al global en su función posterior para acceder a la variable.apply_filters
Entonces, ¿ por qué no usar entonces? puede obtener fácilmente el valor de retorno de eso.Respuestas:
do_action
no funciona así Cuando llama,do_action('crunchify_print_scripts_styles')
WP mira su lista de acciones registradas y filtros para cualquiera que esté conectado a un enlace llamadocrunchify_print_scripts_styles
y luego ejecuta esas funciones.Y probablemente quieras eliminar esto:
... porque no puede obtener el resultado de retorno de su función.
Además, cuando utiliza este enlace particular, no puede garantizar que otras funciones no pongan en cola más scripts o estilos después de haber generado su lista. Use un gancho que se active después de que todos los scripts y estilos se hayan puesto en cola, como wp_head, por conveniencia, o mejor aún, simplemente llame a su función dentro de su tema cuando desee mostrar el resultado.
Volver a trabajar su código así debería funcionar ...
Luego dentro de su tema:
... le mostrará los resultados para la depuración, o por supuesto ...
... te dará la lista para manipular.
Al llamarlo en el tema, asegúrese de llamarlo después de que todos los scripts y estilos estén en cola.
Para llamarlo desde su complemento, conéctelo a cualquier enlace que se ejecute después de wp_enqueue_scripts, como wp_head como mencioné anteriormente:
fuente
$all_the_scripts_and_styles = crunchify_print_scripts_styles();
dentro de tu plugin! Ajustó la respuesta a su gusto.global wp_scripts
global wp_styles
están totalmente vacías. Pero trabajan con undo_action or apply_filters
wp_enqueue_scripts
acción como recomendé originalmente?Puede usar
wp_print_scripts
ywp_print_styles
acciones para acceder de manera oportuna y adecuada a los scripts y estilos en cola, ya que estas acciones son los últimos eventos antes de que los scripts y los estilos se incluyan en el documento y, por eso, el último evento donde las modificaciones$wp_styles
o$wp_scripts
podrían tener efecto en los estilos y guiones incluidos en el documento.Por lo tanto, son los eventos en los que puede estar más seguro
$wp_styles
y$wp_scripts
contienen los scripts y estilos efectivamente incluidos en el documento.Si declara
$enqueued_scripts
adn$enqueued_styles
como variables globales (o cualquier otro ámbito válido, por ejemplo, podría almacenarlo en la propiedad de un método), podría acceder a la lista de secuencias de comandos y estilos en una acción posterior.Por ejemplo (solo un ejemplo rápido):
fuente
Si realmente desea obtener una lista de todos los estilos, puede usar el nuevo filtro 'script_loader_tag' (desde la versión 4.1).
El "wp_print_scripts" es:
es decir, no muestra scripts en el pie de página.
Referencias
Agregue atributos de aplazamiento y asíncrono a los scripts de WordPress
wp_print_scripts
fuente