Pulizia dei tag script

27 apr 2012, 17:46:37
Visualizzazioni: 1.18K
Voti: 2

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.

2
Commenti

Cosa stai cercando esattamente di fare qui? Dal tuo codice, sembra che tu voglia trasformare elementi come <link rel="stylesheet" id="1234" href="http://site.url/style.css" type="text/css" media="screen" /> in <link rel="stylesheet" href="http://site.url/style.css" media="screen" />. Quindi... rimuovere attributi come "id" e "type". È corretto? Se sì... perché?

EAMann EAMann
27 apr 2012 18:22:10

Ciao @EAMann - sì, voglio ripulire i tag script come fatto per i tag link - quindi l'output sarebbe <script src="source_url"></script>. Per rispondere alla tua domanda sul "perché?" è per produrre un output più semantico per HTML5 (non abbiamo bisogno di quei tag, quindi sono inutili da mantenere). Quella segnalazione di bug di WP che ho linkato esprime la stessa opinione che ho io su questo (che purtroppo non è ancora stata implementata), quindi sto cercando una possibile soluzione alternativa. Grazie.

Zach Zach
27 apr 2012 18:46:18
Tutte le risposte alla domanda 2
2

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.

27 apr 2012 19:20:17
Commenti

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 Zach
27 apr 2012 22:20:26

@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.

kaiser kaiser
28 apr 2012 11:47:09
0

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');
30 apr 2015 13:28:13