플러그인 자바 스크립트에서 defer =“defer”태그를 추가하는 방법은 무엇입니까?


28

플러그인 자바 스크립트에 지연 태그를 추가 할 수 없습니다. Google 개발자의 페이지 속도 테스트를 통해 연락 양식 7 자바 스크립트 에 지연 태그를 추가 할 것을 제안합니다 .

이것이 연락처 양식 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" 태그 를 추가하는 방법은 무엇입니까?



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

경고 : 테스트하지 않고 단지 아이디어. :)

최신 정보

이 코드로 플러그인을 작성하고 테스트 했습니다. 참조 https://gist.github.com/1584783를


이것은 requirejs에서 data-main과 함께 사용하기에도 완벽합니다.
Nicola Peluchetti 2016

그것은 좋은 해킹이며 너무 간단합니다. 필자는 필요할 때 charset = 'utf-8'을 추가하는 것도 좋을 것이라고 생각합니다!
webaware

위대하지만 왜 : ""가 아니라 '이어야합니다!?
henrywright

@henrywright WordPress '는 반환 된 문자열의 양쪽에 추가 "하면 잘못된 HTML이됩니다.
fuxia

2
아마도 다른 스크립트와 함께 작동하도록 이것을 바꾸려는 경우에 좋은 아이디어는 아마도 if( ! is_admin() ){}ACF와 같은 인기있는 플러그인을 사용하면 글꼴 끝에서만 사용하도록 유효성을 검사하는 것 입니다.
crissoca
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.