Eklenti javascripti defer = "erfer" etiketi nasıl eklenir?


28

Eklenti javascripti erteleme etiketi ekleyemedim. Google geliştirici sayfa hızı testi, 7 javascripti iletişim formunda erteleme etiketi eklememi önerir .

Bu, iletişim formu 7'nin başlıkta javascript'i içerme şeklidir.

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' );
}

Şimdi yukarıdaki kodda defer = "defer" etiketini nasıl ekleyebilirim ?



1
Güzel Soru @Viruthagiri.
Ramkumar M

Yanıtlar:


56

WordPress 4.1 itibariyle bir filtre vardır: script_loader_tag. Doğru betiği bulmak için kullanabilirsiniz:

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 );

Eski cevap

Özel bir filtre yok ... en azından bir tane göremiyorum. Fakat …

  • wp_print_scripts() aramalar WP_Scripts->do_items()
  • hangi çağırır WP_Scripts->do_item()
  • hangi kullanır esc_url()
  • hangi yapar bir filtre sunuyoruz: 'clean_url'.

Ve işte başlıyoruz:

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 );

Uyarı: Test edilmedi, sadece bir fikir. :)

Güncelleştirme

Bu kod ile bir eklenti yazıp test ettim . Bkz https://gist.github.com/1584783


Bu ayrıca, gereklilikleri temel alan verilerle kullanmak için de mükemmeldir
Nicola Peluchetti,

Bu güzel bir kesmek ve çok basit. Gerektiğinde charset = 'utf-8' komutunu eklemek için de iyi olacağını düşünüyorum!
webaware

Harika, ama neden: '
Olmamalı

@ henrywright WordPress ', döndürülen dizenin her iki tarafına da ekler , "geçersiz HTML ile sonuçlanır.
fuxia

2
Muhtemelen, birisinin bunu diğer senaryolarla çalışmak üzere çevirmek istemesi durumunda iyi bir fikir if( ! is_admin() ){}ACF gibi popüler eklentileri kullanmanızın başınızı ağrıtmasına neden olabilir.
crissoca
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.