jquery 버전 업데이트


24

WordPress 버전 4.7.2를 실행합니다. jQuery 버전 1.12를 사용합니다. 이 버전을 더 높은 버전으로 업데이트해야합니다. 이전에 새 버전으로 바꾸었지만 WordPress 코어를 업그레이드하면 다시 1.12로 바뀝니다. WordPress에서 영구적으로 사용하는 jQuery 버전을 어떻게 변경합니까?

답변:


29

경고 : 특히 관리자 패널에서 핵심 jQuery 버전을 바꾸지 않아야합니다. 많은 WordPress 핵심 기능이 버전에 따라 다를 수 있습니다. 또한 다른 플러그인은jQuery코어에 추가 된 버전에따라 달라질 수 있습니다.

핵심 jQuery버전 을 변경하려면 확실하게 활성 테마 functions.php파일 에 다음 코드를 추가 하십시오 (플러그인을 작성하는 경우에 더 좋습니다).

function replace_core_jquery_version() {
    wp_deregister_script( 'jquery' );
    // Change the URL if you want to load a local copy of jQuery from your own server.
    wp_register_script( 'jquery', "https://code.jquery.com/jquery-3.1.1.min.js", array(), '3.1.1' );
}
add_action( 'wp_enqueue_scripts', 'replace_core_jquery_version' );

이것은 핵심 jQuery버전 을 대체 하고 대신 3.1.1Google 서버에서 버전 을 로드 합니다.

또한 권장 하지는 않지만 다음 추가 코드 줄을 사용하여 jQuery 버전도 바꿀 수 wp-admin있습니다.

add_action( 'admin_enqueue_scripts', 'replace_core_jquery_version' );

이렇게하면 WordPress를 업데이트 한 후에도 jQuery원하는 버전을 사용할 수 있습니다.

약간 더 나은 기능 :

replace_core_jquery_version위 의 기능은 또한 jquery-migrateWordPress core에 의해 추가 된 스크립트 를 제거합니다 . 최신 버전의 jQuery가 이전 버전의에서는 제대로 작동하지 않기 때문에 이는 합리적입니다 jquery-migrate. 그러나 최신 버전도 포함 할 수 jquery-migrate있습니다. 이 경우 다음 기능을 대신 사용하십시오.

function replace_core_jquery_version() {
    wp_deregister_script( 'jquery-core' );
    wp_register_script( 'jquery-core', "https://code.jquery.com/jquery-3.1.1.min.js", array(), '3.1.1' );
    wp_deregister_script( 'jquery-migrate' );
    wp_register_script( 'jquery-migrate', "https://code.jquery.com/jquery-migrate-3.0.0.min.js", array(), '3.0.0' );
}

만약 당신이 테마를 깨뜨린 것을 발견하면 functions.php에서 액션을 제거 할 수 있습니까? 원래 jQuery 버전으로 되돌 리거나 영구적으로 변경됩니까?
Nick

1
wp_enqueue_scripts조치 의 콜백 함수가 jQuery 만 업데이트하고 jQuery가 다른 곳에서 대기중인 경우 조치를 제거하면 원래 jQuery가 복원됩니다. 그러나 때때로 서버 캐시 설정에 따라 브라우저가 이전 CODE를 캐시하므로 변경 사항을 확인하려면 브라우저 캐시를 지워야합니다.
Fayaz

알았어 고마워 난 그냥이 작업을 추가하기 전에 내 사이트를 망치지 않았는지 확인하고 싶었습니다. 나는 당신이 말한 것이 정확하다고 생각했지만 안전하게 연주하고 싶었습니다.
Nick

1
이 변경 사항은 CODE 자체에 따라 다르므로 데이터베이스에는 아무것도 저장 되지 않으므로 영구적이지 않습니다 . 따라서 관련 코드를 제거하면 이전 상태로 되돌아갑니다.
Fayaz

플러그인 / 테마의 버전이 1.12 이하인 경우 3.x 버전의 마이그레이션 스크립트가 작동하지 않습니다. 이에 대한 자세한 내용 : wordpress.stackexchange.com/a/244543/75495
cjbj

5

이 특정 문제에 대한 플러그인을 개발했습니다. 플러그인은 프론트 엔드에만로드되므로 WordPress jQuery를 엉망으로 만들지 않습니다. 참조 : WordPress 용 jQuery 관리자

왜 또 다른 jQuery 업데이터 / 관리자 / 개발자 / 디버깅 도구?

개발자 도구 중 어느 것도 특정 버전의 jQuery 및 / 또는 jQuery Migrate를 선택할 수 없기 때문입니다. 프로덕션 버전과 축소 버전을 모두 제공합니다. 아래 기능을 참조하십시오!

✅ 프런트 엔드에서만 실행되며 WordPress 관리자 / 백엔드 및 WP 사용자 정의 프로그램을 방해하지 않습니다 (호환성 이유로 https://core.trac.wordpress.org/ticket/45130https : // core 참조). trac.wordpress.org/ticket/37110

✅ jQuery 및 / 또는 jQuery Migrate 켜기 / 끄기

특정 버전 의 jQuery 및 / 또는 jQuery Migrate 활성화

그리고 훨씬 더! 코드는 오픈 소스이므로 학습하고 배우고 기여할 수 있습니다.


거의 모든 사람이 잘못된 핸들을 사용합니다

WordPress는 실제로 jquery가 아닌 jquery-core 핸들을 사용합니다.

https://github.com/WordPress/WordPress/blob/91da29d9afaa664eb84e1261ebb916b18a362aa9/wp-includes/script-loader.php#L226

// jQuery
$scripts->add( 'jquery', false, array( 'jquery-core', 'jquery-migrate' ), '1.12.4' );
$scripts->add( 'jquery-core', '/wp-includes/js/jquery/jquery.js', array(), '1.12.4' );
$scripts->add( 'jquery-migrate', "/wp-includes/js/jquery/jquery-migrate$suffix.js", array(), '1.4.1' );

JQuery와 핸들 부하 단지의 별칭입니다 JQuery와 코어JQuery와 - 마이그레이션

별칭에 대한 자세한 정보를 참조하십시오 : wp_register_script 여러 식별자를?

올바른 방법

아래 예에서 https://code.jquery.com 의 공식 jQuery CDN을 사용 하고 CDN 속성을 추가 할 수 있도록 script_loader_tag 도 사용 합니다.
다음 코드를 사용할 수 있습니다.

// Front-end not excuted in the wp admin and the wp customizer (for compatibility reasons)
// See: https://core.trac.wordpress.org/ticket/45130 and https://core.trac.wordpress.org/ticket/37110
function wp_jquery_manager_plugin_front_end_scripts() {
    $wp_admin = is_admin();
    $wp_customizer = is_customize_preview();

    // jQuery
    if ( $wp_admin || $wp_customizer ) {
        // echo 'We are in the WP Admin or in the WP Customizer';
        return;
    }
    else {
        // Deregister WP core jQuery, see https://github.com/Remzi1993/wp-jquery-manager/issues/2 and https://github.com/WordPress/WordPress/blob/91da29d9afaa664eb84e1261ebb916b18a362aa9/wp-includes/script-loader.php#L226
        wp_deregister_script( 'jquery' ); // the jquery handle is just an alias to load jquery-core with jquery-migrate
        // Deregister WP jQuery
        wp_deregister_script( 'jquery-core' );
        // Deregister WP jQuery Migrate
        wp_deregister_script( 'jquery-migrate' );

        // Register jQuery in the head
        wp_register_script( 'jquery-core', 'https://code.jquery.com/jquery-3.3.1.min.js', array(), null, false );

        /**
         * Register jquery using jquery-core as a dependency, so other scripts could use the jquery handle
         * see /wordpress/283828/wp-register-script-multiple-identifiers
         * We first register the script and afther that we enqueue it, see why:
         * /wordpress/82490/when-should-i-use-wp-register-script-with-wp-enqueue-script-vs-just-wp-enque
         * /programming/39653993/what-is-diffrence-between-wp-enqueue-script-and-wp-register-script
         */
        wp_register_script( 'jquery', false, array( 'jquery-core' ), null, false );
        wp_enqueue_script( 'jquery' );
    }
}
add_action( 'wp_enqueue_scripts', 'wp_jquery_manager_plugin_front_end_scripts' );


function add_jquery_attributes( $tag, $handle ) {
    if ( 'jquery-core' === $handle ) {
        return str_replace( "type='text/javascript'", "type='text/javascript' integrity='sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=' crossorigin='anonymous'", $tag );
    }
    return $tag;
}
add_filter( 'script_loader_tag', 'add_jquery_attributes', 10, 2 );
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.