Come aggiungere il tag defer = "defer" nei javascript del plugin?


29

Non ho potuto aggiungere il tag di differimento nei javascript degli plugin. Il test della velocità dello sviluppatore di Google mi suggerisce di aggiungere un tag di differimento nel modulo di contatto 7 javascript.

Ecco come il modulo di contatto 7 include javascript nell'intestazione.

add_action( 'wp_enqueue_scripts', 'wpcf7_enqueue_scripts' );

function wpcf7_enqueue_scripts() {
    // jquery.form.js originally bundled with WordPress is out of date and deprecated
    // so we need to deregister it and re-register the latest one
    wp_deregister_script( 'jquery-form' );
    wp_register_script( 'jquery-form', wpcf7_plugin_url( 'jquery.form.js' ),
        array( 'jquery' ), '2.52', true );

    $in_footer = true;
    if ( 'header' === WPCF7_LOAD_JS )
        $in_footer = false;

    wp_enqueue_script( 'contact-form-7', wpcf7_plugin_url( 'scripts.js' ),
        array( 'jquery', 'jquery-form' ), WPCF7_VERSION, $in_footer );

    do_action( 'wpcf7_enqueue_scripts' );
}

Ora come aggiungere il tag defer = "defer" nel codice sopra?



1
Bella domanda @Viruthagiri.
Ramkumar M,

Risposte:


57

Come di WordPress 4.1 è presente un filtro: script_loader_tag. Puoi usarlo per trovare lo script corretto:

add_filter( 'script_loader_tag', function ( $tag, $handle ) {

    if ( 'contact-form-7' !== $handle )
        return $tag;

    return str_replace( ' src', ' defer="defer" src', $tag );
}, 10, 2 );

Vecchia risposta

Non esiste un filtro dedicato disponibile ... almeno non riesco a vederne uno. Ma …

  • wp_print_scripts() chiamate WP_Scripts->do_items()
  • che chiama WP_Scripts->do_item()
  • quale usa esc_url()
  • che fa offrire un filtro: 'clean_url'.

Ed eccoci qui:

function add_defer_to_cf7( $url )
{
    if ( FALSE === strpos( $url, 'contact-form-7' )
      or FALSE === strpos( $url, '.js' )
    )
    { // not our file
        return $url;
    }
    // Must be a ', not "!
    return "$url' defer='defer";
}
add_filter( 'clean_url', 'add_defer_to_cf7', 11, 1 );

Avvertenza: non testato, solo un'idea. :)

Aggiornare

Ho scritto e testato un plugin con questo codice. Vedi https://gist.github.com/1584783


Questo è perfetto anche per l'uso con i dati principali in requestjs
Nicola Peluchetti,

È un bel trucco, e così semplice. Penso che sarebbe utile anche per aggiungere charset = 'utf-8' quando necessario!
webaware,

Fantastico, ma perché: deve essere un ', non "!?
henrywright,

@henrywright WordPress aggiunge 'su entrambi i lati della stringa restituita, con "conseguente HTML non valido.
fuxia

2
Probabilmente una buona idea nel caso in cui qualcuno volesse far funzionare questo con altri script sarà assicurarsi di convalidare per usarlo solo sul font-end, forse l'uso di if( ! is_admin() ){}plugin popolari come ACF potrebbe farti venire il mal di testa.
crissoca,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.