Limpiar etiquetas script
Quiero limpiar las etiquetas <script>
generadas por WordPress para producir una salida más semántica para HTML5.
Ya puedes hacer esto para etiquetas <style>
usando este código adjunto al filtro style_loader_tag
:
//limpiar las etiquetas de estilo predeterminadas de WordPress
add_filter('style_loader_tag', 'clean_style_tag');
function clean_style_tag($input) {
preg_match_all("!<link rel='stylesheet'\s?(id='[^']+')?\s+href='(.*)' type='text/css' media='(.*)' />!", $input, $matches);
//solo mostrar media si es print
$media = $matches[3][0] === 'print' ? ' media="print"' : '';
return '<link rel="stylesheet" href="' . $matches[2][0] . '"' . $media . '>' . "\n";
}
Pero aún no hay un equivalente script_loader_tag
en el núcleo. Fue propuesto en el pasado, pero por ahora necesitamos una solución alternativa.
He estado revisando /wp-includes/class.wp-scripts.php
en la función function do_item( $handle, $group = false )
alrededor de la línea 79 que contiene la salida del script (específicamente líneas 117-120
), pero estoy teniendo problemas para encontrar un filtro apropiado que pueda usarse aquí.

Si realmente quieres hacer esto, entonces ya debería ser posible.
El global $wp_scripts
es una instancia de la clase WP_Scripts
, que a su vez es una instancia de la clase WP_Dependencies
.
Así que en teoría (no probado), deberías poder hacer algo como esto:
function alter_script_tags()
{
echo '<pre>';
print $GLOBALS['wp_scripts']->print_html;
echo '</pre>';
}
add_action( 'wp_enqueue_scripts', 'alter_script_tags', 999999 );
Esto es solo un bosquejo aproximado, pero deberías captar la idea.

Parece que esto se intentó hace un tiempo https://github.com/retlehs/roots/blob/6492fe93187c79a9a8b0bce9fb006fb2f3aa75cc/inc/roots-scripts.php y recuerdo haber probado esto y encontré algunos problemas - seguiré investigando sobre esto. Gracias.

@Zach Ehm, ¿dónde ves print_html
ahí? El código que enlazaste no tiene nada que ver con lo que escribí arriba. Lo que estoy sugiriendo es que interceptes la variable $print_html
que contiene la salida, ya que esta es la única posibilidad de alterar algo realmente en lugar de reemplazarlo (y por lo tanto, mantener la compatibilidad con Plugins y Temas). Por cierto: Si lo aprecias, entonces apreciaría recibir un voto positivo.

No estoy seguro de la compatibilidad con la versión de WP, pero tomado del módulo Soil plugin clean-up.php
para Roots. Usa esto en el functions.php
de tu tema o similar.
// Limpia las etiquetas de script
function clean_script_tag($input) {
// Elimina el atributo type='text/javascript'
$input = str_replace("type='text/javascript' ", '', $input);
// Reemplaza comillas simples por dobles
return str_replace("'", '"', $input);
}
// Aplica el filtro a las etiquetas de script cargadas
add_filter('script_loader_tag', 'clean_script_tag');
