Pulizia dei tag script
Voglio pulire i tag <script>
generati da WordPress per produrre un output più semantico per HTML5.
Puoi già farlo per i tag <style>
usando questo codice collegato al filtro style_loader_tag
:
//pulisce i tag style predefiniti di 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);
//mostra il media solo se è print
$media = $matches[3][0] === 'print' ? ' media="print"' : '';
return '<link rel="stylesheet" href="' . $matches[2][0] . '"' . $media . '>' . "\n";
}
Ma non esiste ancora un equivalente script_loader_tag
nel core. È stato proposto in passato, ma per ora abbiamo bisogno di una soluzione alternativa.
Ho iniziato a cercare in /wp-includes/class.wp-scripts.php
nella function do_item( $handle, $group = false )
intorno alla riga 79 che contiene l'output degli script (nello specifico righe 117-120
), ma sto avendo qualche difficoltà a trovare un filtro appropriato che potrebbe essere usato qui.

Se vuoi veramente farlo, allora dovrebbe già essere possibile.
Il global $wp_scripts
è un'istanza della classe WP_Scripts
, che a sua volta è un'istanza della classe WP_Dependencies
.
Quindi in teoria (non testato), dovresti essere in grado di fare qualcosa del genere:
function alter_script_tags()
{
echo '<pre>';
print $GLOBALS['wp_scripts']->print_html;
echo '</pre>';
}
add_action( 'wp_enqueue_scripts', 'alter_script_tags', 999999 );
Questo è solo un abbozzo approssimativo, ma dovresti aver capito l'idea.

Sembra che questo sia stato tentato un po' di tempo fa https://github.com/retlehs/roots/blob/6492fe93187c79a9a8b0bce9fb006fb2f3aa75cc/inc/roots-scripts.php e ricordo di averlo testato e di aver riscontrato alcuni problemi - continuerò a fare ricerche su questo. Grazie.

@Zach Ehm, dove vedi print_html
lì? Il codice che hai linkato non ha nulla a che fare con quello che ho scritto sopra. Quello che sto suggerendo è che tu intercetti la variabile $print_html
che contiene l'output, poiché questa è l'unica possibilità di modificare qualcosa invece di sostituirlo (e quindi rimanere compatibile con Plugin e Temi). A proposito: Se apprezzi, apprezzo ricevere un upvote.

Non sicuro della compatibilità con la versione di WP, ma preso dal modulo Soil plugin clean-up.php
per Roots. Usalo nel functions.php
del tuo tema o simile.
/**
* Pulisce il tag script rimuovendo l'attributo type e sostituendo gli apici singoli con doppi
* @param string $input Il tag script originale
* @return string Il tag script pulito
*/
function clean_script_tag($input) {
$input = str_replace("type='text/javascript' ", '', $input);
return str_replace("'", '"', $input);
}
add_filter('script_loader_tag', 'clean_script_tag');
