จะเพิ่มแท็ก defer =“ defer” ใน javascripts ปลั๊กอินได้อย่างไร


28

ฉันไม่สามารถเพิ่มแท็กที่เลื่อนออกไปในปลั๊กอินจาวาสคริปต์ การทดสอบหน้าเว็บสำหรับนักพัฒนาซอฟต์แวร์ของ Google แนะนำให้ฉันเพิ่มแท็กที่เลื่อนออกไปในรูปแบบการติดต่อ 7 javascripts

นี่คือวิธีที่ฟอร์มการติดต่อ 7 รวมถึงจาวาสคริปต์ในส่วนหัว

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

ตอนนี้วิธีเพิ่มแท็กdefer = "defer"ในโค้ดด้านบน


2
ตั๋วที่เกี่ยวข้อง: core.trac.wordpress.org/ticket/12009
scribu

1
คำถามที่ดี @Viruthagiri
Ramkumar M

คำตอบ:


56

ในฐานะของ WordPress 4.1 script_loader_tagมีตัวกรอง: คุณสามารถใช้มันเพื่อค้นหาสคริปต์ที่ถูกต้อง:

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

คำตอบเก่า

ไม่มีตัวกรองเฉพาะที่ใช้ได้ ... อย่างน้อยฉันก็ไม่เห็น แต่ ...

  • wp_print_scripts() โทร WP_Scripts->do_items()
  • สายไหน WP_Scripts->do_item()
  • ซึ่งใช้ esc_url()
  • ซึ่งจะ'clean_url'มีตัวกรอง:

และที่นี่เราไป:

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

Caveat: ไม่ได้ทดสอบเป็นเพียงความคิด :)

ปรับปรุง

ฉันได้เขียนและทดสอบปลั๊กอินด้วยรหัสนี้ ดูhttps://gist.github.com/1584783


นี่คือที่สมบูรณ์แบบนอกจากนี้ยังใช้กับข้อมูลหลักใน Needjs
Nicola Peluchetti

นั่นเป็นแฮ็คที่ดีและเรียบง่ายมาก ฉันคิดว่ามันจะดีสำหรับการเพิ่มชุดอักขระ = 'utf-8' เมื่อจำเป็น!
webaware

เยี่ยมมาก แต่ทำไม: ต้องเป็น 'ไม่ใช่ "!
henrywright

@henrywright WordPress เพิ่ม'ทั้งสองด้านของสตริงที่ส่งคืนซึ่ง"จะทำให้ HTML ไม่ถูกต้อง
fuxia

2
อาจเป็นความคิดที่ดีในกรณีที่บางคนต้องการที่จะเปิดใช้งานการทำงานกับสคริปต์อื่น ๆ เพื่อให้แน่ใจว่าได้ตรวจสอบการใช้งานเฉพาะในแบบอักษรสิ้นสุดอาจใช้if( ! is_admin() ){}ปลั๊กอินที่นิยมเช่น ACF อาจทำให้คุณปวดหัว
crissoca
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.